ファイヤープロジェクト
リストへのアクセス関数
2003-10-11T18:00+09:00   matsu
リストの任意のコンスや要素へのアクセスを可能にする関数の紹介.
carは引数のリストのcar部を返す関数であった.
> (setf x '(a b c))
(A B C)
> (car x)
A
carは言い替えれば引数のリストの最初のコンスのcar部を返す関数である.引数のリストのn番目のコンスのcar部を返す関数はnthである.
> (setf x '(a b c))
(A B C)
> (nth 1 x)
B
nは0から始まり,0番目のcar部は最初のコンスのcar部である.nthと同様の関数としてnthcdrがある.cdrは引数のリストのcdr部を返す関数であった.
> (setf x '(a b c))
(A B C)
> (cdr x)
(B C)
carは言い替えれば引数のリストの最初のコンスのcdr部を返す関数である.引数のリストのn番目のコンスのcdr部を返す関数はnthcdrである.
> (setf x '(a b c))
(A B C)
> (nthcdr 1 x)
(B C)
nは0から始まり,0番目のcdr部とは引数のリスト自身である.したがって,nのnthはnのnthcdrのcar部である.
> (setf x '( a b c))
(A B C)
> (nth 1 x)
B
> (car (nthcdr 1 x))
B
nthのより特殊な関数としてfirst,second,third,...tenthがある.
> (setf x '(a b c))
(A B C)
> (first x)
A
> (nth 0 x)
A
nthで0番目の要素がfirstである.
cxr
nthやnthcdrの限定版としてcxrがある.xには4つまでのaかdの組合せが入る.例えばcadrは引数リストのcdrのcarである.caadrは引数リストのcdrのcarのcarである.xの部分がaならcar,dならcdrで,xの最後の文字から順にcarかcdrを引数リストに適用していく.
> (setf alist '(a (b c) d))
(A (B C) D)
> (cddr alist) ; alistのcdrのcdr
(D)
> (cadr alist) ; alistのcdrのcar
(B C)
> (caadr alist) ; alistのcdrのcarのcar
B
> (caddr alist) ; alistのcdrのcdrのcar
D
cxrはxの最後の文字から前方に解釈していくので読みにくい.
lastはリストの最後のコンスを取得する関数である.
> (setf x '(a b c))
(A B C)
> (last x)
(C)
このように最後の「コンス」を取得するのであって,最後の「要素」を取得するのではない.最後の要素はlastのcarである.
matsu(C)
Since 2002
Mail to matsu