Реализация алгоритма Copycat Дугласа Хофштадтера. Алгоритм Copycat описан в Википедии, и на этой странице есть множество ссылок для более глубокого чтения. См. также Фарглександрию.
Эта реализация является копией реализации Java Скотта Боланда. Оригинальную работу по переводу с Java на Python выполнил Дж. Алан Броган (@jalanb на GitHub). Версия Java имеет графический интерфейс, аналогичный оригинальному Lisp; эта версия Python не имеет встроенного кода графического интерфейса, но может быть включена в более крупную программу с графическим интерфейсом.
Дж. Алан Броган пишет:
В тех случаях, когда мне было трудно разобраться в реализации Java, я брал идеи из реализации LISP или непосредственно из книги Мелани Митчелл «Создание аналогий как восприятие».
Чтобы клонировать репо локально, выполните следующие команды:
$ git clone https://github.com/fargonauts/copycat.git
$ cd copycat/copycat
$ python main.py abc abd ppqqrr --iterations 10
Сценарий принимает три или четыре аргумента. Первые две представляют собой пару строк с некоторым изменением, например «abc» и «abd». Третья — это строка, которую скрипт должен попытаться изменить аналогичным образом. Четвертый (по умолчанию «1») — это количество итераций.
Это может привести к выводу, например
ppqqss: 6 (avg time 869.0, avg temp 23.4)
ppqqrs: 4 (avg time 439.0, avg temp 37.3)
Первое число указывает, сколько раз Copycat выбирал эту строку в качестве ответа; выше означает «более очевидно». Последняя цифра указывает среднюю конечную температуру рабочего пространства; нижний означает «более элегантный».
Чтобы установить модуль Python и начать работу с ним, выполните следующие команды:
$ pip install -e git+git://github.com/fargonauts/copycat.git#egg=copycat
$ python
>>> from copycat import Copycat
>>> Copycat().run('abc', 'abd', 'ppqqrr', 10)
{'ppqqrs': {'count': 4, 'avgtime': 439, 'avgtemp': 37.3}, 'ppqqss': {'count': 6, 'avgtime': 869, 'avgtemp': 23.4}}
Результатом run
является словарь, содержащий ту же информацию, что и main.py
напечатанный выше.