Without this patch, `python main.py abc aabbcc milk` will reliably crash. I believe what happens here is that we initialize all the slipnodes and everything, and then `slipnet.predecessor` becomes `None`, which means that if that concept ever arises on its own (vs. arising as the "opposite" of "successor"), we'll be passing around `None` instead of a proper `Slipnode` and everything goes sideways. This line doesn't correspond obviously to anything in the Java code, so I think it's just bogus --- an experiment in "brain damage" that was accidentally committed?
co.py.cat
An implementation of Douglas Hofstadter's copycat algorithm. The copycat algorithm is explained on Wikipedia, and that page has many links for deeper reading.
This implementation is a copycat of Scott Boland's Java implementation, but re-written into Python. It's not a direct translation - but based on his code. I did not carry over the GUI, as this version can more usefully be run from command line, or imported for use by other Python scripts.
In cases where I could not grok the Java implementation easily I took ideas from the LISP implementation, or directly from Melanie Mitchell's "Analogy-Making as Perception"
I also tried to make the code more pythonic.
Installation
There are no particular installation instructions, just clone and run, e.g.
$ git clone https://github.com/jalanb/co.py.cat.git
$ cd co.py.cat/copycat
$ python main.py abc abd ijk
Running
The script takes three arguments. The first two are a pair of triplets with some change, for example "abc" and "abd". The third is a triplet which the script should try to change analogously
For example the following invocation will probably display "ijl"
$ python main.py abc abd ijk