(list';quote';5)='';5而不是';(引号5)或';(';';5)?
似乎Common Lisp确实以一种特殊的方式处理(list';quote';5)='';5而不是';(引号5)或';(';';5)?,list,lisp,quote,List,Lisp,Quote,似乎Common Lisp确实以一种特殊的方式处理(列出'quote'x)。例如,(list'oddp'5)的值是”(oddp 5),而(list'quote'5)的值是'5。换句话说,quote函数似乎是经过计算的,即使它由于前面的quote而应该处于数据模式 比较以下表达式的值: 1. (list 'quote '5) = (list 'quote 5) = (quote '5) = ''5 2. (list '' '5) = '(''5) 3. (list ' 5)
(列出'quote'x)
。例如,(list'oddp'5)
的值是”(oddp 5)
,而(list'quote'5)
的值是'5
。换句话说,quote函数似乎是经过计算的,即使它由于前面的quote而应该处于数据模式
比较以下表达式的值:
1. (list 'quote '5) = (list 'quote 5) = (quote '5) = ''5
2. (list '' '5) = '(''5)
3. (list ' 5) = (list 5) = '(5)
4. (list 'oddp '5) != (oddp 5)
这种评价似乎非常独特。但我想我可能会很困惑
有人能帮我更好地理解这里的模式吗?'X
和(quote X)
是等效的,第一个是第二个的简写,打印机在序列化它时将使用该简写。但在您的示例中没有实际的评估。(评估(quote X)
会给你X
)。'X
和(quote X)
是等价的,第一个是第二个的简写,打印机在序列化它时将使用该简写。但在您的示例中没有实际的评估。(评估(引用X)
会给你X
)。什么意思?您可以将其用于两种不同的事情:读取后的相等和计算后的相等。顺便说一句,在Lisp本身中,函数=
比较数字
第一步是阅读:
(列出'quote'5)
阅读>(列出(引用)(引用5))
(列表''5)
阅读>(列表(引用(引用5)))
(列表'5)
阅读>(列表(引号5))
(列出“oddp”5)
阅读>(列出(引用oddp)(引用5))
现在,“
是一个读取宏。它转换下一个文本形式'someform
读作(引用someform)
。打印机在打印时可能会重新传输。注意它是如何与漂亮的打印交互的。以下示例位于LispWorks中:
CL-USER 50 > '(QUOTE SOMEFORM)
(QUOTE SOMEFORM)
CL-USER 51 > (setf *print-pretty* t)
T
CL-USER 52 > '(QUOTE SOMEFORM)
'SOMEFORM
还要注意,引号readmacro字符“
读取的是空白
'5
的读取方式与示例'5
相同
但是,将引号直接放在下一个表达式的前面是一种很好的方式,没有空格
第二步是评估:
(列表(引号)(引号5))
eval>(引号5)
prettyprint>'5
(列表(引号(引号(引号(引号)5)))
eval>((引号(引号)5)))
prettyprint>(''5)
(列表(引号5))
eval>(5)
(LIST(QUOTE ODDP)(QUOTE 5))
eval>(ODDP 5)
什么是=的意思?您可以将其用于两种不同的事情:读取后的相等和计算后的相等。顺便说一句,在Lisp本身中,函数=
比较数字
第一步是阅读:
(列出'quote'5)
阅读>(列出(引用)(引用5))
(列表''5)
阅读>(列表(引用(引用5)))
(列表'5)
阅读>(列表(引号5))
(列出“oddp”5)
阅读>(列出(引用oddp)(引用5))
现在,“
是一个读取宏。它转换下一个文本形式'someform
读作(引用someform)
。打印机在打印时可能会重新传输。注意它是如何与漂亮的打印交互的。以下示例位于LispWorks中:
CL-USER 50 > '(QUOTE SOMEFORM)
(QUOTE SOMEFORM)
CL-USER 51 > (setf *print-pretty* t)
T
CL-USER 52 > '(QUOTE SOMEFORM)
'SOMEFORM
还要注意,引号readmacro字符“
读取的是空白
'5
的读取方式与示例'5
相同
但是,将引号直接放在下一个表达式的前面是一种很好的方式,没有空格
第二步是评估:
(列表(引号)(引号5))
eval>(引号5)
prettyprint>'5
(列表(引号(引号(引号(引号)5)))
eval>((引号(引号)5)))
prettyprint>(''5)
(列表(引号5))
eval>(5)
(LIST(QUOTE ODDP)(QUOTE 5))
eval>(ODDP 5)
Re:例如,(LIST'ODDP'5)
的值是”(ODDP 5)
不,不是。(列表'oddp'5)
的值正好是(oddp 5)
。没有报价。这是一个恰好和表达式(oddp 5)
的值类似的对象。两者比较相等
:
(equal '(oddp 5) (list 'oddp 5)) -> T
回复:虽然(列表'quote'5)
的值为'5
这也是不对的。(列表'quote'5)
的值是对象(quote 5)
,表示为'5
。表达式''5
将生成类似的对象
产生相同或相似对象的两个表达式并不总是同一事物4
、(+2 2)
和(*2)
都是不同的对象,但当这些数据段被视为代码并进行计算时,它们会产生相同的值。Re:例如,(列表“oddp”5)
的值是(oddp 5)
不,不是。(列表'oddp'5)
的值正好是(oddp 5)
。没有报价。这是一个恰好和表达式(oddp 5)
的值类似的对象。两者比较相等
:
(equal '(oddp 5) (list 'oddp 5)) -> T
回复:虽然(列表'quote'5)
的值为'5
这也是不对的。(列表'quote'5)
的值是对象(quote 5)
,表示为'5
。表达式''5
将生成类似的对象
产生id的两个表达式