为什么(列出'quote'x)评估为'x而不是('x)或(引用'x)?

时间:2010-11-19 16:15:50

标签: lisp common-lisp evaluation quote clisp

我正在尝试学习LISP,并且正在通过一个代码示例,其中使用类似于以下代码的内容:

(列出'引用5)

这在REPL中评估为'5。我期望它评估为('5)或(引用5)

我正在CLISP REPL中尝试这个。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:6)

read-evaluate-print循环首先读取,然后评估

'引用读作“名称为QUOTE的符号”

5读作“数字5”

所以(列表'引用5)被评估为“制作一个列表,其第一个元素是名称为QUOTE且其第二个元素为5”的符号。

此评估的结果可写为“(引用5)”。 “'5”是另一种说法,一些(可能是大多数)lisp实现中的打印机将选择打印较短的形式而不是较长的形式。

当你通过在repl上输入来学习这些东西时,你需要记住这一点 阅读和评估的两个步骤是截然不同的,但循环正在做两个

尝试

* (read-from-string "(list 'quote 5)")
(LIST 'QUOTE 5)

一次做一步,或

* (first (read-from-string "(quote 5)"))
QUOTE
* (second (read-from-string "(quote 5)"))
5
* (read-from-string "(quote 5)")
'5

说服自己“(引用5)”和“'5”是相同的事情