Scheme 方案说明-cdr和car

Scheme 方案说明-cdr和car,scheme,Scheme,我有一个例子: (apply + 2 (cdadr '(1 ((2 . 3) 4)))) 这个返回6?为什么(cdadr'(1((2.3)4))4?? 我不明白。它应该是3吗?列表(abc)是(A.(b.(c)())的缩写。 因此“(1((2.3)4))是“(1((2.3)。(4)()的缩写) 为了确保这一点,我们在REPL中进行了测试: > ''(1 ((2 . 3) . (4 . ())) . ()) '(1 ((2 . 3)) 4) cdadr是的缩写(cdr(car(cdr))

我有一个例子:

(apply + 2 (cdadr '(1 ((2 . 3) 4))))
这个返回6?为什么
(cdadr'(1((2.3)4))
4?? 我不明白。它应该是3吗?

列表(abc)是(A.(b.(c)())的缩写。 因此“(1((2.3)4))是“(1((2.3)。(4)()的缩写)

为了确保这一点,我们在REPL中进行了测试:

> ''(1 ((2 . 3) . (4 . ())) . ())
'(1 ((2 . 3)) 4)
cdadr
的缩写(cdr(car(cdr))

这里car提取一对的第一部分
(car'(a.d))=a
和cdr提取对的第二部分
(cdr'(a.d))=d

让我们看看发生了什么:

> (cdr '(1 ((2 . 3) . (4 . ())) . ()))
'(((2 . 3) 4))
> (car (cdr '(1 ((2 . 3) . (4 . ())) . ())))
'((2 . 3) 4)
> (cdr (car (cdr '(1 ((2 . 3) . (4 . ())) . ()))))
'(4)
> (apply + 2 '(4))
6

请注意((2.3)4)与((2.3)。(4.()相同,并且该(4.()的cdr也就是(4)。

结果是列表
”(4)
,而不是数字
4

您有一个包含两个元素的列表,其中
1
是第一个元素,而list
((2.3)4)
是第二个元素

换句话说,列表的
cdr
(cons((2.3)4)),
,或者
((2.3)4))

> (cdr '(1 ((2 . 3) 4)))
'(((2 . 3) 4))
这是一个包含一个元素的列表-列表
((2.3)4)
-当然是
汽车

> (car (cdr '(1 ((2 . 3) 4))))
'((2 . 3) 4)
最后

> (cdr (car (cdr '(1 ((2 . 3) 4)))))
'(4)

我建议拆分
cdadr
并在REPL中使用它。不是4而是
(4)