この章ではリストから要素を取り出す方法と,要素からリストを構築する方法について書かれている.car
,cdr
,cons
の基本関数以外に,便利な関数が幾つか紹介されている.
要素の取り出し
-
first
,second
, ….,tenth
第1要素から第10要素まで簡単に取りだす関数が用意されている. -
elt
Element関数はリストから任意位置の要素を取り出せる.位置のインデックスは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
---リストの最後の要素を除いた残りを返す関数.