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)