Comments 20
Нет слов, одни эмоции )))
Я так понял, BF - это доведенный до логического конца язык Forth: f v g v 2^ 2^ + - ;
Мозгосношение засчитано.
Кто хочет такой же, но для прода, то есть проверенный временем APL.
Когда коту делать нечего, он яйца лижет
месье знает толк в извращениях)))
Интерпретатор за выходные.
код
[-]>>[-]
зануляет 2 ячейки, превращая{head, 0, [?], 0, ?, ...}
в{head, 0, 0, 0, [0], ...}
У меня и в голове, и в наспех накиданном скрипте получается, что {head, 0, 0, 0, [?], 0, ?, ...}
превращается в{head, 0, 0, 0, 0, 0, [0], ...}
То есть, смещение вправо больше на 2 единицы, чем в примере, и в начале памяти есть еще две нулевых ячейки.
Это ошибка или особенности интерпретации? Потому что насколько я понимаю, интерпретация тут намеренно примитивная в виде последовательного чтения символов, без какого-либо стека. За исключением возвращения к предыдущим парным скобкам (перескакивания к следующим), но он реализовано лишь дополнительными циклами и просто переводит указатель текущего символа входного текста и не относится напрямую к памяти и ее собственному указателю.
Справедливый вопрос. Я не описал, что именно имею ввиду под head
.
На первой итерации head
- это первые 2 нуля, а у вас в обозначениях head
- это то, что находится перед этими двумя нулями. Т.е. просто разница в нотации, код вы поняли совершенно верно.
Спасибо за уточнение! Я уж голову сломал, думал, может, есть дополнительные полноценные преобразования значений в указатели и обратно.
И спасибо за статью, с этим объяснением с языка упал флер экзотики, в которой подсознательно не хочется разбираться, и он стал гораздо ближе и очевиднее. Можно взять за базовую отправную точку для изучения машины Тьюринга и смежных тем.
Понятно, что это троллейбус и буханка хлеба, но автору нужно отдать должное хотя бы потому, что он решился на создание сего чуда.
Думаю, что данная статья - хорошая развлекуха для тех, кого посадили в тюрьму пожизненно.
Интерпретатор Brainfuck на Brainfuck