我想学习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" 是相同的东西

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top