Реализовать SWAP в Forth

Я видел это в интервью с Чаком Муром он говорит:

слова, которые управляют этим стеком, - это DUP, DROP и OVER period. Там нет, ну своп очень удобно, и вы хотите его, но это не так машинная инструкция.

поэтому я попытался реализовать SWAP только DUP, DROP и OVER, но не мог понять, как это сделать, не увеличивая стек, по крайней мере.

как это сделать, неужели?

3 ответов


вы правы, это кажется трудным или невозможным только с dup, drop и over.

Я бы предположил, что i21 наверное также имеет некоторую манипуляцию стеком возврата, поэтому это будет работать:

: swap   over 2>r drop 2r> ;

Edit: на GA144, который также не имеет собственного подкачки, он реализован как:

over push over or or pop

Push и pop обратитесь к стеку возврата,or на самом деле xor. См.http://www.colorforth.com/inst.htm


в стандарте далее это

: swap ( a b -- b a ) >r >r 2r> ;

или

: swap ( a b -- b a ) 0 rot nip ; 

или

: swap ( a b -- b a ) 0 rot + ;

или

: swap ( a b -- b a ) 0 rot or ;

Это замечание Чарльза Мура легко может быть неправильно понято, потому что оно находится в контексте его четвертых процессоров. А обмен не является машинной инструкцией для аппаратного процессора Forth. В общем, в Forth некоторые определения находятся в терминах других определений, но это заканчивается определенными так называемыми примитивами. В четвертом процессоре они реализованы в аппаратном обеспечении, но во всех четвертых реализациях, например, на хост-системах или одноплатных компьютерах они реализованы последовательностью машинной инструкции, например, для Intel:

код подкачки поп, поп топор, ВХ толкать, толкать топор, ВХ конце-код

Он также использует термин "удобный", потому что своп часто можно избежать. Это ситуация, когда вам нужно обработать два элемента данных, но они не в том порядке, в котором вы их хотите. обмен означает умственную нагрузку, потому что вы должны представить, что содержимое стека изменилось. Часто можно держать стек прямо с помощью вспомогательного стека временно удерживайте вам не нужно прямо сейчас. Или если вам нужен товар дважды над предпочтительнее. Или слово может быть определено по-разному, с его параметрами в другом порядке.

выходя из вашего пути, чтобы реализовать обмен С точки зрения 4-х четвертых слов вместо 4-х машинных инструкций явно контрпродуктивно, потому что эти четвертые слова должны были быть реализованы парой самих машинных инструкций.