我正在尝试学习 LISP,并且正在通过一个代码示例,其中使用了类似于以下代码的内容:
(列出'引用5)
这在 REPL 中计算为 '5。我希望它评估为 ('5) 或 (quote 5)
我正在 CLISP REPL 中尝试这个。
任何帮助,将不胜感激。
我正在尝试学习 LISP,并且正在通过一个代码示例,其中使用了类似于以下代码的内容:
(列出'引用5)
这在 REPL 中计算为 '5。我希望它评估为 ('5) 或 (quote 5)
我正在 CLISP REPL 中尝试这个。
任何帮助,将不胜感激。
read-evaluate-print 循环首先读取,然后评估
'quote 读作“名称为 QUOTE 的符号”
5 读作“数字 5”
因此 (list 'quote 5) 被评估为“创建一个列表,其第一个元素是名称为 QUOTE 且第二个元素是 5 的符号”。
这个评估的结果可以写成“(quote 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
说服自己 "(quote 5)" 和 "'5" 是一回事