写一个由car和cdr组成的表达式,它将从列表中返回c'(a(b c)(d))

时间:2013-01-20 17:24:19

标签: scheme racket

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

2 个答案:

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

的语法糖
相关问题