如果您有一个避难程序321&
,您如何在不丢弃第二个两个项目的情况下访问第一个项目(3)?
指令允许切换前两个项目,但这并没有让我更接近最后一个…
我使用的当前方法是使用p
命令将整个堆栈写入程序内存,以便到达最后一项。例如
32110p20p.20g10g@
然而,我觉得这并没有像它应该的那样优雅…没有什么技术可以把堆栈上的第一个元素作为N弹出,把第N个元素从堆栈中弹出,然后把它推到顶部吗?
(否定是完全可以接受的答案)
不完全是。您的代码可以缩短为
32110p.10g@
但是如果你想要一个更一般的结果,下面的东西可能会起作用。下面,我使用Befunge的目的是(至少在我看来):作为一种函数式编程语言,每个函数都有自己的一组行和列。指针是使用指令创建的,存储1
和0
的指令决定函数被调用的位置。但我要指出的一点是,堆栈在几乎所有语言中都不是用于存储的。只需将堆栈写入存储器。注意,987
从长度为10的堆栈溢出。
v >>>>>>>>>>>12p:10p11pv
1 0 v<<<<<<<<<<<<<<<<<<
v >210gp10g1-10p^
>10g|
>14p010pv
v<<<<<<<<<<<<<<<<<<<<<<<<
v >210g1+g10g1+10p^
>10g11g-|
v g21g41<
v _ v
>98765432102^>. 2^>.@
上面的代码将堆栈上的第n-1项写到'memory',将第n项写到其他地方,读取'memory',然后将第n项压入堆栈。该函数被程序的底线调用了两次。
我提出一个更简单的解决方案:
013p 321 01g @
☺
"stores"程序中位于位置☺(0,1)(013p
)的3,将其从堆栈中删除,然后将内容放在堆栈上,并返回位于堆栈顶部的☺(01g
)。@
确保程序完成。