lisp - 为什么 (列出 'quote 1) evaluates to ' 1 而不是 1?

标签 lisp

我需要一些结合使用 list 的启示和quote

这是我所看到的:

[1]> (list '1)
(1)

很公平。 (list '1)变成"('1)"其计算结果为 (1)'只返回它后面的内容。

[2]> (list 'quote 1)
'1

为什么不1 ,为什么 '在这里没有被评估,因为:

[3]> '1
1

作为一个一般性问题,评估过程将尝试递归地解决它能找到的所有内容,我是否错了?

最佳答案

由于 list 应该构造一个参数列表,因此如果它返回一个数字,那就很奇怪了。事实上,'1 是一个两元素列表,包含符号 quote 和数字 1 作为其元素:

CL-USER> (first (list 'quote 1))
QUOTE
CL-USER> (second (list 'quote 1))
1

它显示为 '1 而不是 (QUOTE 1) 的原因是你的 Lisp 系统打印以 quote 开头的单元素列表> 特别是。

(list '1) becomes "('1)" which evaluates to (1)

这是不正确的。由于 list 是一个普通函数,因此对其参数形式进行求值以给出每个参数的值。在这种情况下,表单 '1 将被计算为值 1list 将接收该值作为其单个参数。没有对返回值进行评估。

关于lisp - 为什么 (列出 'quote 1) evaluates to ' 1 而不是 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50083120/

相关文章:

list - 生成组合

lisp - 确定父类(super class)型路径

list - 普通口齿不清 : all or any elements are true in a list

recursion - 递归计算LISP中二叉树的深度

lisp - 带有循环和条件的 Lisp 代码中的语法错误

regex - 通过 emacs Lisp 的顶级 S 表达式分段 Lisp 源代码?

emacs - 新手 : Keybindings error in Elisp

functional-programming - 检查整数列表是否升序

web-applications - 如何检测 Racket Web 应用程序上的按键?

objective-c - 在 Cocoa OSX 中显示表格 View 的最少步骤