1

编写一个由 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
4

2 回答 2

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
于 2013-01-20T17:33:16.153 回答
1
(cadadr '(a (b c) (d)))

cadadr是语法糖(car (cdr (car (cdr ...)))

于 2013-01-21T06:59:07.750 回答