为什么(名单 '报价' x)的评估为 'X,而不是(' X)或(报价“X)?
-
26-09-2019 - |
题
我想学习LISP和正在经历在使用类似于下面的代码的东西代码示例:
(列表“报价5)
此计算结果为“5在REPL。我预期评估为('5)或(5报价)
我试图这一点在CLISP REPL。
任何帮助,将不胜感激。
解决方案
在读评估打印循环首先读取,然后评估
“报价读作 ”其名称是QUOTE符号“
5读作 “5号”
所以(列表“报价5)被评价为‘使其第一元件是其名称是QUOTE和符号,它的第二个元素是5的列表’。
此评价的结果可以写成“(引用5)”。 “'5" 说这句话的另一种方式,在某些(可能是大多数)打印机口齿不清implentations将选择打印较短的形式,而不是更长之一。
当你学习这些东西通过打字的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" 是相同的东西
不隶属于 StackOverflow