如何在堆栈中弹出第N项[Befunge-93]

时间:2014-08-15 19:07:12

标签: stack esoteric-languages befunge

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

指令\允许人们切换前两个项目,但这并不能让我更接近最后一个......

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

32110p20p.20g10g@

然而,我觉得这并不像它那样优雅......没有技巧可以将堆叠中的第一个项目弹出为N,从堆栈中弹出第N个项目并推送它到顶部?

(不是一个完全可以接受的答案)

1 个答案:

答案 0 :(得分:3)

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

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项写入并包括“内存”,将第n个项写入其他位置,读取“内存”,然后将第n个项目推送到堆栈。 该程序的底线调用该函数两次。