scheme - 为什么 '(1 2 3) 评估为列表 en Lisp(方案)?

标签 scheme lisp evaluation quote

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 的全部作品: 程序的结构实际上在下面使用了列表和原子。

quoteeval 的对偶:(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/

相关文章:

scala - 如何实现TCO的递归

javascript - 在javascript中返回语句后执行的代码?

recursion - 是否有可能在 Lisp 中递归生成 40,000 多个斐波那契数列?

lisp - Common Lisp 确定目录是子目录还是另一个目录

functional-programming - LISP 中的 REVERSE 函数

function - 如何评估GDB中的函数?

c# - 在C#中,每次都会评估循环声明吗?

types - 阴阳延续拼图在打字语言中有意义吗?

lisp - 在 Lisp 中搜索 BST

list - 将新项目附加到方案中列表的末尾