我在接受Chuck Moore采访时看到,他说:
操纵该堆栈的单词是DUP,DROP和OVER周期.没有,SWAP很方便你想要它,但它不是机器指令.
所以我试图SWAP仅仅实现DUP,DROP而且OVER,但是无法弄清楚如何做到这一点,至少不增加堆栈.
怎么样,真的吗?
你是对的,只有重复,掉落和结束似乎很难或不可能.
我猜想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
在标准 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)