【问题标题】:Get n-th element from stack in Forth在 Forth 中从堆栈中获取第 n 个元素
【发布时间】:2013-09-04 18:14:41
【问题描述】:

有没有办法通过 Forth 中的索引访问堆栈中的元素,而不弹出它上面的所有元素?

例如,如果我将数字 1 到 1000 压入堆栈,我如何获得第 500 个元素?

【问题讨论】:

    标签: forth


    【解决方案1】:
    500 PICK
    

    ...将元素从堆栈向下复制 500 级到 Forth79 中的堆栈顶部。

    【讨论】:

    • 所以0 pick 会将最近添加的元素复制到堆栈中?
    • @sashoalm 据我所知,2 PICKOVER 相同,1 PICKDUP 相同。我认为0 PICK 无效。
    • @LarsBrinkhoff 这很奇怪,我的记忆,当我查到this copy of the standard 时,我发现(诚然没有核对真实的东西)在第 27 页上说; 2 PICK is quivalent to OVER.
    • @LarsBrinkhoff 诚然,我在 85 年左右主要使用 Forth,所以我不太相信自己的记忆力 ;)
    【解决方案2】:

    如果你使用的 Forth 没有 PICK,你可以定义为

    : PICK   ?DUP IF SWAP >R 1- RECURSE R> SWAP EXIT THEN DUP ;
    

    (当然,迭代版本也是可能的。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2010-10-16
      相关资源
      最近更新 更多