我正在尝试学习LISP,并且正在通过一个代码示例,其中使用类似于以下代码的内容:
(列出'引用5)
这在REPL中评估为'5。我期望它评估为('5)或(引用5)
我正在CLISP REPL中尝试这个。
任何帮助都将不胜感激。
答案 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”是相同的事情