方案:汽车和司机

时间:2018-04-12 21:33:13

标签: scheme

我正在读这本书: 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 来获取第一个地址,我需要在脑海中制定结果,看看山的另一边,这似乎是一个极端的对我来说难以理解......所以我希望我错了。

1 个答案:

答案 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)