racket/scheme 中的解释和评估有什么区别?

Whats the difference between interpretation and evaluation in racket/scheme?

乍一看,他们似乎很相似。它们是同义词吗?

解释意味着评估,但并非所有评估都必须解释。

解释器是将程序作为输入并对其求值的函数或程序。解释通常表示"evaluation with an interpreter."

另一方面,评估并不总是意味着解释。评估可以通过执行已编译的程序,或通过 运行 JIT 编译器,或通过迭代小步缩减,或除解释之外您能想到的任何其他方法来进行。

解释是执行评估的算法程序。评估与计算中的解释相关,就像蕴含与逻辑推理相关(一种实现蕴含的方式可以在实现一种推理算法的序言中看到)。虽然蕴含是实现逻辑演绎的一种数学方法,但当您想在计算机上实现这种演绎时,您可以使用推理算法。

评估是为计算提供答案的数学过程的名称。

解释是一种实现评估的方式(解释器是实现数学 eval 函数的函数)。

编译与解释相同(它执行与解释器几乎相同的步骤)但它预先计算有关代码的静态结果并为虚拟机生成字节码(SECD machine for scheme, WAM machine for prolog 等).虚拟机是另一种实现评估的方式等等

还有其他实施评估的方式。 denotational semantics 是一种方式(也是最简单的方式,尽管它涵盖了所有主要概念)。

另一种实现评估的方法是通过 redex

要了解更多信息,您可以查看大学教授的SICP类型课程。