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

lev*_*ach 5 lisp evaluation clisp common-lisp quote

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

(列表'引用5)

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

我在CLISP REPL中尝试这个.

任何帮助,将不胜感激.

tel*_*ent 6

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

'引用被读作"名称为QUOTE的符号"

5被读作"5号"

因此(列表'引用5)被评估为"制作一个列表,其第一个元素是名称为QUOTE且其第二个元素为5的符号".

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

当您通过在repl中键入来学习这些东西时,您需要记住,阅读和评估的两个步骤是截然不同的,但循环正在同时执行

尝试

* (read-from-string "(list 'quote 5)")
(LIST 'QUOTE 5)
Run Code Online (Sandbox Code Playgroud)

一次做一步,或

* (first (read-from-string "(quote 5)"))
QUOTE
* (second (read-from-string "(quote 5)"))
5
* (read-from-string "(quote 5)")
'5
Run Code Online (Sandbox Code Playgroud)

说服自己"(引用5)"和"'5"是一回事

  • 哈哈,stackoverflow语法着色并没有真正设置为lisp语法... (3认同)