我正在读这本书: http://www.shido.info/lisp/scheme3_e.html
我坚持这个练习:
(car '((1 2 3) (4 5 6)))
根据我的理解,我必须明白我们如何得到((1 2 3)(4 5 6))(car'((1 2 3)(4 5 6)) )因为 car 评估了第一个地址。
我尝试过几次,但无法得到确切的"字符串" (我甚至不知道如何打电话给他们):
(cons (cons 1 (cons 2 (cons 3 '()))) (cons 4 (cons 5 (cons 6 '()))))
给了我
{{1 2 3} 4 5 6}
(cons (cons (cons 1 (cons 2 (cons 3 '()))) '()) (cons 4 (cons 5 (cons 6 '()))))
给了我
{{{1 2 3}} 4 5 6}
(cons (cons (cons 1 (cons 2 (cons 3 '()))) '()) (cons (cons 4 (cons 5 (cons 6 '()))) '()))
给了我
{{{1 2 3}} {4 5 6}}
至少我得到两个部分的括号......
问题是,如果我每次打电话给 car 来获取第一个地址,我需要在脑海中制定结果,看看山的另一边,这似乎是一个极端的对我来说难以理解......所以我希望我错了。
答案 0 :(得分:1)
'((1 2 3) (4 5 6))
是(cons (cons 1 (cons 2 (cons 3 '()))) (cons (cons 4 (cons 5 (cons 6 '()))) '()))
> (cons (cons 1 (cons 2 (cons 3 '()))) (cons (cons 4 (cons 5 (cons 6 '()))) '()))
'((1 2 3) (4 5 6))
如果我们用符号替换内部列表,因为它们的值无关紧要,我们得到:
(car '((1 2 3) (4 5 6)))
(car '(X Y))
(car (cons 'X (cons 'Y '())))
通过缩减(car (cons A B)) => A
生成'X
,结果为(cons 1 (cons 2 (cons 3 '())))
或'(1 2 3)