16

誰かがSchemeのバリエーションcarと機能の基本的な説明を教えてもらえますか?cdr

私が正しければcar、リストの最初のアイテムを返します。 cdr最初の要素を除いたリストを返します。

私はこれらの他のバリエーション、より具体的には、、などのようなものについて混乱していcadarます。caddrcddr

ランダムな例としてこれがあるとしましょう:

define X '(a b (c d e))

(car X)
(cdr X)
(cadr X)
(cadar X)

(car X)生成するa(cdr X)生成する(b (c d e))cadr生成するbcarしかし、 /cdrのような他のバリエーションを推測する方法がわかりませんcadar

4

2 に答える 2

29

これらの関数の名前を解析することで、これらの関数の意味を推測できます。

最初の文字(「c」)と最後の文字(「r」)の間で、「a」は「の車」を意味し、「d」は「のcdr」を意味します。

それで:

  • cadr「cdrの車」です、
  • cddrcdrのcdrは、
  • cadarは「車のcdrの車」です(したがって、パラメーターはリストのリストである必要があります)、
于 2012-10-28T20:01:24.983 に答える
7

最も簡単な方法は、スキームインタープリターに入力することです。

(car X)   -> a
(cdr X)   -> (b (c d e))
(cadr X)  -> (car (cdr X))       -> (car '(b (c d e))) -> b
(cadar X) -> (car (cdr (car X))) -> (car (cdr 'a))     -> error

例からわかるように、aまたはが複数ある場合は、逆方向に読み取ることができます。最初に引数の(d)を取り、次に結果から(a)を取り、以下同様に最初の引数に到達するまで続けます。dcadrcdrcar

于 2012-10-28T20:03:33.870 に答える