编写一个由car和cdr组成的表达式,它将从列表'(a (b c) (d))
返回c。
我正在使用名为Dr Racket的程序
我试过
(car (car (car (cdr '(a (b c) (d))))))
自己获得c但它不起作用。
错误说明:
mcar: contract violation
expected: mpair?
given: b
答案 0 :(得分:2)
您的代码中有一个小错误:请注意,您需要外部列表中第二个元素的第二个元素(内部列表)。您的代码说明:检索列表第二个元素的第一个元素的第一个元素:
(car (car (car (cdr '(a (b c) (d))))))
......导致错误。你的意图是这样的:
(car (cdr (car (cdr '(a (b c) (d))))))
让我们一步一步地看一下:
(cdr '(a (b c) (d))) ; => '((b c) (d)) : rest of the outer list
(car (cdr '(a (b c) (d)))) ; => '(b c) : second element of the outer list
(cdr (car (cdr '(a (b c) (d))))) ; => '(c) : rest of the inner list
(car (cdr (car (cdr '(a (b c) (d)))))) ; => 'c : second element of the inner list
答案 1 :(得分:1)
(cadadr '(a (b c) (d)))
cadadr
是(car (cdr (car (cdr ...)))