首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(list 'quote '5)的值如何= ''5而不是‘(引号5)或'(''5)?

(list 'quote '5)的值如何= ''5而不是‘(引号5)或'(''5)?
EN

Stack Overflow用户
提问于 2012-04-19 18:31:30
回答 3查看 156关注 0票数 1

似乎Common Lisp确实以一种特殊的方式对待(list 'quote 'x)。例如,(list 'oddp '5)的值是'(oddp 5),而(list 'quote '5)的值是''5。换句话说,即使由于前面的报价,报价函数应该处于数据模式,它似乎也会被求值。

比较以下表达式的值:

代码语言:javascript
运行
复制
    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)

这种评估看起来非常特殊。但我想我可能会很困惑。

有人能帮我更好地理解这里的模式吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-19 20:13:33

=是什么意思?您可以将其用于两种不同的事情:读取后的相等和计算后的相等。顺便说一句,在Lisp语言中,函数=可以比较数字。

第一步是阅读

(list 'quote '5) read > (LIST (QUOTE QUOTE) (QUOTE 5))

(list '' '5) read > (LIST (QUOTE (QUOTE (QUOTE 5))))

(list ' 5) read > (LIST (QUOTE 5))

(list 'oddp '5) read > (LIST (QUOTE ODDP) (QUOTE 5))

现在'是一个读取宏。它转换下一个文本形式。'someform只读作(QUOTE SOMEFORM)。打印机在打印时可能会重新转换。注意它是如何与漂亮的打印交互的。下面的示例使用LispWorks编写:

代码语言:javascript
运行
复制
CL-USER 50 > '(QUOTE SOMEFORM)
(QUOTE SOMEFORM)

CL-USER 51 > (setf *print-pretty* t)
T

CL-USER 52 > '(QUOTE SOMEFORM)
'SOMEFORM

另请注意,引号读宏字符'读过空格。

'5的读数与例如' 5的读数相同。

但是将引号直接放在下一个表达式的前面,而不是空格,这是一个很好的风格。

第二步是评估

(LIST (QUOTE QUOTE) (QUOTE 5))评估> (QUOTE 5)漂亮打印> '5

(LIST (QUOTE (QUOTE (QUOTE 5))))评估> ((QUOTE (QUOTE 5)))漂亮打印> (''5)

(LIST (QUOTE 5))评估> (5)

(LIST (QUOTE ODDP) (QUOTE 5))评估> (ODDP 5)

票数 8
EN

Stack Overflow用户

发布于 2012-04-19 18:58:25

'X(quote X)是等价的,第一个只是第二个的简写,打印机在序列化它时会使用这个简写。但在您的示例中没有发生实际的评估。(评估(quote X)会得到X)。

票数 3
EN

Stack Overflow用户

发布于 2012-04-20 07:26:30

Re:例如,(list 'oddp '5)的值为'(oddp 5)

不,不是。(list 'oddp '5)的值就是(oddp 5)。没有引用。这是一个恰好与表达式'(oddp 5)的值相似的对象。这两个比较equal

代码语言:javascript
运行
复制
(equal '(oddp 5) (list 'oddp 5)) -> T

Re:而(list 'quote '5)的值是''5__。

这也是不对的。(list 'quote '5)的值是对象(quote 5),表示为'5。表达式''5将产生一个类似的对象。

产生相同或相似对象的两个表达式并不总是相同的。4(+ 2 2)(* 2 2)都是不同的对象,但是当将这些数据作为代码进行计算时,它们会产生相同的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10226219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档