scheme - 对于应用顺序,参数的评估顺序是什么?从左到右还是从右到左?

标签 scheme lisp sicp

在 SICP 第 1.1.5 部分程序应用的替代模型我很好奇评估的应用顺序。

我理解应用顺序在应用外部过程之前评估参数。

我的问题是它通过参数的顺序是什么?

例如,

(+ (+ 2 1) (/ 10 2))

(+ 2 1)(/10 2) 会先被计算吗?

最佳答案

我假设您仍在阅读本书的第 1 章。请放心,本书的其余部分将向您更详细地解释这一点。现在,您可能对此感兴趣 footnote from section 3.2.1 The Rules for Evaluation :

... this order [left to right or right to left] should always be considered to be an implementation detail, and one should never write programs that depend on some particular order. For instance, a sophisticated compiler might optimize a program by varying the order in which subexpressions are evaluated.

后面的章节会越来越详细地讨论这个问题。例如:

  • Exercise 3.8 : "定义一个简单的过程 f,如果 (+ (f 0) (f 1)) 的参数将返回 0 + 从左到右求值,但如果参数从右到左求值,则返回 1"
  • Exercise 4.1 - 更改元循环评估器中的评估顺序。
  • Section 5.4.1 The Core of the Explicit-Control Evaluator (评估过程应用程序小节)- 展示了如何在显式控制评估器中实现过程应用程序。在这里您可以清楚地看到参数评估循环的细节如何确定评估顺序。

关于scheme - 对于应用顺序,参数的评估顺序是什么?从左到右还是从右到左?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59859451/

相关文章:

clojure - 无法更改/建立 : [some-def] with set in Clojure 的根绑定(bind)

haskell - 检查 Haskell 中函数的内部结构

clojure - 为什么在 Clojure 中尝试使用辛普森规则时会出现强制转换错误?

scheme - 为什么这个方案函数运行正确却产生 "illegal function"错误?

windows - 在 Windows 命令行上运行 raco

lisp - 如何调用Racket中的其他程序?

database - 处理大型结构化数据集

scheme - 错误 : (/) bad argument type: #<unspecified> Chicken Scheme Square root approximation

programming-languages - 内存、解释器和闭包

design-patterns - 是否有任何动态或基于函数的语言的设计模式