Необходимость оператора "гниения"
Почему Forth реализует rot
оператор, и почему он работает именно на трех самых верхних элементов стека?
Это просто для удобства или Форт не будет полным по Тьюрингу без такой инструкции? Является ли число три минимальным жизнеспособным вариантом для завершения Тьюринга?
Я могу представить, что можно реализовать rot
с pick
или же roll
, Так что, если бы не было ни одной из этих трех операций, было бы это все же завершено по Тьюрингу?
2 ответа
Эта тема не имеет никакого отношения к полноте по Тьюрингу.
rot
операция только для удобства и эффективности. Это можно определить с помощью swap
:
: rot ( a b c -- b c a ) >R SWAP R> SWAP ;
pick
а также roll
также может быть реализован с использованием стека возврата (эти >R
а также R>
операции), или любой другой стек.
Стек может быть реализован с использованием слов доступа к памяти.
Взгляните на какой-нибудь минимальный FORTH, такой как jonesforth или lbForth (оба являются git-репозиториями). Это довольно удивительно, как мало с точки зрения примитивов требуется, чтобы оторваться от земли.