1

リストからcを返すcarとcdrで構成される式を記述します'(a (b c) (d))

私はDrRacketというプログラムを使用しています

私は試した

(car (car (car (cdr '(a (b c) (d))))))

自分でcを取得しますが、機能しません。

エラーは次のように述べています。

mcar: contract violation
expected: mpair?
given: b
4

2 に答える 2

2

コードに小さなエラーがあります: 外側のリストの 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 に答える