Go to the first, previous, next, last section, table of contents.

### `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

Go to the first, previous, next, last section, table of contents.