gpt4 book ai didi

scheme - 在使用 DrScheme 的 SICP 练习 2.26 中,为什么 cons 返回一个列表,而不是一对列表?

转载 作者:行者123 更新时间:2023-12-02 04:01:49 26 4
gpt4 key购买 nike

在 SICP 练习 2.26 中,给出了此方案代码:

(define x (list 1 2 3))
(define y (list 4 5 6))

然后给出这个 cons 调用:

(cons x y)

我预计会产生一对列表,((1 2 3) (4 5 6))但解释器给出,((1 2 3) 4 5 6)...包含 4 个元素的列表,第一个是列表。为什么 y 受到不同对待?我尝试查找其他 SICP 答案以获取解释,但找不到令人满意的内容。那么,是否有任何计划/Lisp 专家可以阐明这方面的缺点?预先感谢您的任何见解。

最佳答案

'((1 2 3) 4 5 6) 实际上是一对列表。这是另一种写法:

'((1 2 3) . (4 5 6))

但是,打印机会尽可能避免点对符号,因此您会得到第一个表示形式。规则是:

'(x . (xs ...))
=>
'(x xs ...)

对于任何xxs。在这里,您的 x = '(1 2 3)xs = '(4 5 6),因此您得到 ((1 2 3) 4 5 6 )

<小时/>

要了解 cons 和点对符号之间的关系,我们将问题简化为 '(1)'(6)。构建它们的最低级别方法是:

(cons (cons 1 '()) (cons 6 '()))

这里,'() 为 nil,或者空列表。如果我们将其字面翻译为点对符号,我们会得到:

'((1 . ()) . (6 . ()))

但是由于打印机会尽可能折叠点对符号,因此您会得到以下结果:

'((1 . ()) . (6 . ()))
=>
'((1) . (6)) ; <-- x=1, xs=nothing; x=6, xs=nothing
=>
'((1) 6) ; <-- x=1, xs=6

关于scheme - 在使用 DrScheme 的 SICP 练习 2.26 中,为什么 cons 返回一个列表,而不是一对列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2921912/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com