この章ではリストから要素を取り出す方法と,要素からリストを構築する方法について書かれている.car,cdr,cons の基本関数以外に,便利な関数が幾つか紹介されている.
要素の取り出し
-
first,second, ….,tenth
第1要素から第10要素まで簡単に取りだす関数が用意されている. -
eltElement関数はリストから任意位置の要素を取り出せる.位置のインデックスは0から数える.
> (elt '(0 1 2 3 4 5) 3)
3
-
lastリストの末尾の要素を取り出す.
末尾の要素を取り出す別の方法
-
lengthとeltを組み合わせる.
> (set x '(0 1 2 3 4 5))
> (elt x (- (length x) 1))
5
-
reverseで反転させてcarを取る.
> (car (reverse x))
5
cons, append, list の違い.
> (cons '(a b) '(c d))
((A B) C D)
> (append '(a b) '(c d))
(A B C D)
> (list '(a b) '(c d))
((A B) (C D))
append は括弧を取るため空リスト nil は要素を成さない.
> (list '(a) '(b c) nil '(d))
((A) (B C) NIL (D))
> (append '(a) '(b c) nil '(d))
(A B C D)
リストの末尾に要素を挿入する方法
> (append '(ape bear cat) '(dog))
(APE BEAR CAT DOG)
dog が変数 x に入っている場合.
> (setf x 'dog)
> (append '(ape bear cat) (list x))
(APE BEAR CAT DOG)
butlast 関数は cdr の逆
cdr は1番目の要素を除いた残りを返すが,butlast は末尾要素を除いた残りを返す.
> (butlast '(a b c d e))
(A B C D)
butlast 関数を自分で定義するなら下のように定義できる.
> (defun my-butlast (x)
(reverse (cdr (reverse x))))
第4話で出てきた組込み関数一覧
-
first---carと同じ. -
rest---cdrと同じ. -
first,second,…,tenth---1番目から10番目まで要素を簡単に取り出せる関数. -
elt---(elt (リスト) i)でリストのi番目の要素を取り出す関数. -
length---リストの長さを返す関数. -
reverse---リストの要素を逆順に並び替える関数. -
last---リストの最後の要素を返す関数. -
append---引数に与えられたリストを結合する関数. -
list---引数を要素とするリストを作成する関数. -
butlast---リストの最後の要素を除いた残りを返す関数.