4

如果您有 befunge 程序321&,您将如何访问第一项(3)而不丢弃后两项?

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

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

32110p20p.20g10g@

但是,我觉得这并不像它应该的那样优雅......没有技术将堆栈上的第一项弹出为 N,从堆栈中弹出第 N 个项并将其推到顶部?

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

4

2 回答 2

3

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

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

于 2014-09-23T16:51:42.323 回答
0

我提出一个更简单的解决方案:

3 :01p 21 01g @
☺

它将 1 “存储”在程序中的位置 ☺ (0, 1) ( :01p) 而不将其从堆栈中删除,然后将东西放在堆栈上,然后返回 ☺ 在堆栈顶部 ( 01g)。@确保程序完成。

于 2022-02-19T17:20:54.810 回答