quote
('
) 用于引入预估值,因此 (quote x)
产生符号 x
而不是符号的计算结果。
数字、 bool 值、字符和字符串在 Scheme 中是自求值的,因此引用它们并不重要。
但为什么 (quote (1 2 3))
或 (quote ())
对谓词 回答
。#t
列表?
结果不应该是一个“预先评估”的值吗?但是在这种情况下 (1 2 3)
实际上已经被计算为 (list 1 2 3)
?
谢谢。
最佳答案
pre-evaluated value
我不确定你从哪里得到这个词。我从来没有用过它。这不是“预评估”,而是未评估。
这实际上是 Lisp(和 Scheme)是 Homoiconic 的全部作品: 程序的结构实际上在下面使用了列表和原子。
quote
是 eval
的对偶:(eval (list '+ '1 '2 '3))
number 只是数字,(eval (list '+ 1 2 3))
does it as well) 与 (quote '(+ 1 2 3))
相反.
已评估的列表是一个调用,因此未评估的调用是一个列表。
Should't the result be a "pre-evaluated" value? But in this case (1 2 3) has actually been evaluated to (list? 1 2 3)?
您在这里漏掉了一些括号!您得到 (list? '(1 2 3))
(或 (list? (quote (1 2 3))
。也就是说,(list? (列表 1 2 3))
。这是真的。
您可以使用 (eval (list '+ 1 2 3))
检查相反的结果:您得到 6
。
注意:有些值只是对它们自己求值(比如数字或函数。您可以多次向它抛出 eval
,它不会改变任何东西:( eval (eval (eval 1)))
只是 1
。)
关于scheme - 为什么 '(1 2 3) 评估为列表 en Lisp(方案)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39266734/