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类型课程。
乍一看,他们似乎很相似。它们是同义词吗?
解释意味着评估,但并非所有评估都必须解释。
解释器是将程序作为输入并对其求值的函数或程序。解释通常表示"evaluation with an interpreter."
另一方面,评估并不总是意味着解释。评估可以通过执行已编译的程序,或通过 运行 JIT 编译器,或通过迭代小步缩减,或除解释之外您能想到的任何其他方法来进行。
解释是执行评估的算法程序。评估与计算中的解释相关,就像蕴含与逻辑推理相关(一种实现蕴含的方式可以在实现一种推理算法的序言中看到)。虽然蕴含是实现逻辑演绎的一种数学方法,但当您想在计算机上实现这种演绎时,您可以使用推理算法。
评估是为计算提供答案的数学过程的名称。
解释是一种实现评估的方式(解释器是实现数学 eval
函数的函数)。
编译与解释相同(它执行与解释器几乎相同的步骤)但它预先计算有关代码的静态结果并为虚拟机生成字节码(SECD machine for scheme, WAM machine for prolog 等).虚拟机是另一种实现评估的方式等等
还有其他实施评估的方式。 denotational semantics 是一种方式(也是最简单的方式,尽管它涵盖了所有主要概念)。
另一种实现评估的方法是通过 redex。
要了解更多信息,您可以查看大学教授的SICP类型课程。