我正在尝试学习 LISP,并正在查看一个代码示例,其中使用了类似于以下代码的内容:
(列出“引文 5”)
这在 REPL 中评估为“5”。我预计它的评估结果为 ('5) 或 (quote 5)
我正在 CLISP REPL 中尝试这个。
任何帮助,将不胜感激。
读取-求值-打印循环首先读取,然后求值
'quote 被读作“名称为 QUOTE 的符号”
5读作“数字5”
因此 (list 'quote 5) 被评估为“创建一个列表,其第一个元素是名称为 QUOTE 的符号,第二个元素是 5”。
该评估的结果可以写为“(引文5)”。 “'5”是另一种表达方式,某些(可能是大多数)lisp 实现中的打印机将选择打印较短的形式而不是较长的形式。
当你通过在 repl 中输入来学习这些东西时,你需要记住这一点
读取和评估的两个步骤是不同的,但是循环同时执行这两个步骤
Try
* (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”是同一件事
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)