编写一个由 car 和 cdr 组成的表达式,它将从列表中返回 c '(a (b c) (d))
。
我正在使用名为 Dr Racket 的程序
我试过了
(car (car (car (cdr '(a (b c) (d))))))
自己获得 c 但它不起作用。
错误指出:
mcar: contract violation
expected: mpair?
given: b
您的代码中有一个小错误:请注意,您需要外部列表中的第二个元素(这是一个内部列表)的第二个元素。您的代码说明:检索列表第二个元素的第一个元素的第一个元素:
(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
(cadadr '(a (b c) (d)))
cadadr
是语法糖(car (cdr (car (cdr ...)))