Как DP и CC меняются в Piet? - PullRequest
5 голосов
/ 29 апреля 2010

Согласно спецификации,

Черные цветные блоки и края программы ограничивают выполнение программы. Если интерпретатор Piet пытается переместиться в черный блок или от края, он останавливается, и CC переключается. Затем интерпретатор снова пытается выйти из своего текущего блока. Если происходит сбой во второй раз, DP перемещается по часовой стрелке на один шаг. Эти попытки повторяются, причем CC и DP меняются между альтернативными попытками. Если после восьми попыток интерпретатор не может покинуть свой текущий цветовой блок, выхода нет, и программа завершается.

Если я не читаю это неправильно, это противоречит поведению примера последовательности Фибоначчи: http://www.dangermouse.net/esoteric/piet/fibbig1.gif (от: http://www.dangermouse.net/esoteric/piet/samples.html)

В частности, почему ДП поворачивается влево в точке (0,3) ((0,0) (сверху, слева)), когда он достигает левого края? На данный момент, DP и CC являются левыми, поэтому, насколько я понимаю, последовательность должна быть такой:

  1. Попытка (и неудача) покинуть блок, отойдя от края в (0,4),
  2. Переключить CC в ПРАВО,
  3. Попытка (и неудача) покинуть блок, отойдя от края в (0,2).
  4. Повернуть DP в UP,
  5. Попытаться (и успешно) покинуть блок в (1,2), введя белый блок в (1,1)

Поведение, обозначенное трассировкой, похоже, заключается в том, что DP вращается полностью, оставляя CC влево.

Что я неправильно понял?

1 Ответ

6 голосов
/ 29 апреля 2010

Ваш анализ кажется правильным; образец глючит. Белый блок в (1,1) должен быть черным. Вы можете убедиться в этом, взяв образец изображения и выполнив его.

Обратите внимание, что по крайней мере три из интерпретаторов , связанных со страницей цифрового мультиметра, содержат ошибки - Марк Майчер помечен как таковой, Сильвен Тинтилье обрабатывает и выводит правильно, но переключает значение in и inn из спецификации ( это - это версия без ошибок), и PietDev неправильно пересекает цветные блоки.

РЕДАКТИРОВАТЬ: другие белые блоки, вероятно, также должны быть черными, например блок в (6,3).

...