在Forth实施SWAP

sas*_*alm 7 forth

我在接受Chuck Moore采访时看到,他说:

操纵该堆栈的单词是DUP,DROP和OVER周期.没有,SWAP很方便你想要它,但它不是机器指令.

所以我试图SWAP仅仅实现DUP,DROP而且OVER,但是无法弄清楚如何做到这一点,至少不增加堆栈.

怎么样,真的吗?

Lar*_*off 7

你是对的,只有重复,掉落和结束似乎很难或不可能.

我猜想i21 可能还有一些返回堆栈操作,所以这会工作:

: swap   over 2>r drop 2r> ;
Run Code Online (Sandbox Code Playgroud)

编辑:在GA144上,它也没有原生交换,它实现为:

over push over or or pop
Run Code Online (Sandbox Code Playgroud)

Push并且pop引用返回堆栈,or实际上是xor.见http://www.colorforth.com/inst.htm


Mar*_*rix 5

在标准 Forth 中,它是

: swap ( a b -- b a ) >r >r 2r> ;
Run Code Online (Sandbox Code Playgroud)

或者

: swap ( a b -- b a ) 0 rot nip ; 
Run Code Online (Sandbox Code Playgroud)

或者

: swap ( a b -- b a ) 0 rot + ;
Run Code Online (Sandbox Code Playgroud)

或者

: swap ( a b -- b a ) 0 rot or ;
Run Code Online (Sandbox Code Playgroud)