如何弹出堆栈中的第n个项目[Befunge-93]



如果您有一个避难程序321&,您如何在不丢弃第二个两个项目的情况下访问第一个项目(3)?

指令允许切换前两个项目,但这并没有让我更接近最后一个…

我使用的当前方法是使用p命令将整个堆栈写入程序内存,以便到达最后一项。例如

32110p20p.20g10g@

然而,我觉得这并没有像它应该的那样优雅…没有什么技术可以把堆栈上的第一个元素作为N弹出,把第N个元素从堆栈中弹出,然后把它推到顶部吗?

(否定是完全可以接受的答案)

不完全是。您的代码可以缩短为

32110p.10g@

但是如果你想要一个更一般的结果,下面的东西可能会起作用。下面,我使用Befunge的目的是(至少在我看来):作为一种函数式编程语言,每个函数都有自己的一组行和列。指针是使用指令创建的,存储10的指令决定函数被调用的位置。但我要指出的一点是,堆栈在几乎所有语言中都不是用于存储的。只需将堆栈写入存储器。注意,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)。@确保程序完成。

最新更新