【问题标题】:Necessity of the 'rot' operator'rot' 运算符的必要性
【发布时间】:2017-02-23 21:23:39
【问题描述】:

为什么 Forth 实现 rot 操作符,为什么它恰好对栈顶的三个项目进行操作?

仅仅是为了方便还是没有这样的指令,Forth 就不是图灵完备的?三的数目是图灵完备的最小可行选项吗?

我可以想象可以用pickroll 来实现rot。那么如果这三个操作都没有,那它仍然是图灵完备的吗?

【问题讨论】:

  • 它是一种原始的基于堆栈的语言,必须将堆栈顶部的值打乱以完成工作是一种非常普遍的需求。它有很多词汇:dup、?dup、drop、swap、over、nip、tuck、rot、-rot、Sure、convenience。
  • @HansPassant 请看编辑,还是为了方便?
  • 许多处理器都实现了它。用语言提供它是有意义的。我在 1970 年代使用了一种具有 IMP 运算符的语言。

标签: computation-theory formal-languages computation forth stack-based


【解决方案1】:

这个话题与图灵完备性完全无关。

rot 操作只是为了方便和高效。可以使用swap定义:

: rot ( a b c -- b c a ) >R SWAP R> SWAP ;

pickroll 也可以使用返回堆栈(这些 >RR> 操作)或任何其他堆栈来实现。

可以使用内存访问字来实现堆栈。

【讨论】:

    【解决方案2】:

    看看一些最小的 FORTH,例如 jonesforthlbForth(两者都是 git 存储库)。令人惊讶的是,只需很少的原语就可以起步。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多