`car', `cdr', `cons', `append', `reverse', `length'
---------------------------------------------------

car(LIST)
     :: 空でない LIST の先頭要素.

cdr(LIST)
     :: 空でない LIST から先頭要素を取り除いたリスト.

cons(OBJ,LIST)
     :: LIST の先頭に OBJ を付け加えたリスト.

append(LIST1,LIST2)
     :: LIST1 と LIST2 をこの順に 1 つにしたリスト.

reverse(LIST)
     :: LIST を逆順にしたリスト.

length(LIST)
     :: LIST の長さ.

RETURN
     `car()' : 任意, `cdr()', `cons()', `append()', `reverse()' :
     リスト,  `length()' : 自然数

LIST LIST1 LIST2
     リスト

OBJ
     任意

   * リストは [OBJ1,OBJ2,...] と表される. OBJ1 が 先頭要素である.

   * `car()' は, 空でない LIST の先頭要素を出力する.
     空リストが入力された場合は, 空リストが出力される.

   * `cdr()' は, 空でない LIST
     から先頭要素を取り除いたリストを出力する.
     空リストが入力された場合は, 空リストが出力される.

   * `cons()' は,  LIST の先頭に OBJ を付け加えたリストを出力する.

   * `append()' は, LIST1 の要素と LIST2
     のすべての要素を結合させたリスト [LIST1 の要素の並び,LIST2
     の要素の並び] を出力する.

   * `reverse()' は, LIST を逆順にしたリストを出力する.

   * `length()' は, LIST の長さを出力する.
     ベクトル及び行列の要素の個数は, `size()' を用いる.

   * リストは読み出し専用で, 要素の入れ替えはできない.

   * リストの N 番目の要素の取り出しは, `cdr()' を N 回適用 した後
     `car()' を適用することにより可能であるが, 便法として, ベクトル,
     行列などの配列と同様, インデックス `[N]' を後ろに
     付けることにより取り出すことができる. ただし, システム内部では,
     実際にポインタを N 回たどるので,
     後ろの要素ほど取り出しに時間がかかる.

   * `cdr()' は新しいセルを生成しないが, `append()' は, 実際には 第 1
     引数のリストの長さだけの `cons()' の繰り返しとなるため, 第 1
     引数のリストが長い場合には多くのメモリを消費することになる.
     `reverse()' に関しても同様である.

     [0] L = [[1,2,3],4,[5,6]];
     [[1,2,3],4,[5,6]]
     [1] car(L);
     [1,2,3]
     [2] cdr(L);
     [4,[5,6]]
     [3] cons(x*y,L);
     [y*x,[1,2,3],4,[5,6]]
     [4] append([a,b,c],[d]);
     [a,b,c,d]
     [5] reverse([a,b,c,d]);
     [d,c,b,a]
     [6] length(L);
     3
     [7] L[2][0];
     5

