在SICP 4.1.3评估程序数据结构中,它指出:
用户的程序是评估者的数据并不一定会引起混淆。实际上,有时可以方便地忽略此区别,并通过使eval在程序中可用,使用户能够将数据对象显式评估为Lisp表达式。许多Lisp方言提供了一个原始的评估过程,该过程将一个表达式和一个环境作为参数,并评估相对于该环境的表达式。
然后尝试
Chez Scheme Version 9.5
Copyright 1984-2017 Cisco Systems, Inc.
> (define a 5)
> (define b 6)
> (eval '(* a b))
30
我认为结果没有意义,因为它既有效又适用。
正如我从后续内容中学到的,我预测结果应该是
> (eval '(* a b))
'(* (5 6))
然后将*应用于值列表(5 6)。
评估产生要应用的参数和过程的价值,而不是最终结果。
我对评估的理解错了吗?
基本上,(eval '(* a b))
在引擎盖下发生的情况就是您所描述的。既然*
是不是一种特殊形式或宏它评估为程序对象,然后将其评估a
和b
它然后应用从评估得到的程序*
与评估参数列表。它不会中途停止,因此您可以获得完整的评估。
也知道这*
是一个变量。您可以*
通过自己评估来查看其背后的过程。它不会显示*
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句