リスト構造にまつわる関数色々


このページでは、リスト構造にまつわる関数をいくつかまとめて紹介します。 詳しくは こちら
cons obj1, obj2
2引数 (obj1, obj2) をとり、その pair を作ります。
list obj*
0 個以上の引数 (obj*) をとり、 その list を作ります。list とは pair の sequence で、 最後が 空リスト () で終わるものです。

car obj
pair(obj) の car field を返す。
cdr obj
pair(obj) の cdr field を返す。
caar,cadr,...,cddddr
これらは、carcdr を組み合わせたものです。 例えば、 caddr は、
(define (caddr x) (car (cdr (cdr x)))) 
としてつくることも出来ます。

list-tail list k
listk 番目以降のリストを返す。 (list-tail list 0) list をそのまま返す。
list-ref list k
listk 番目の要素を返す。(list-ref list k)は、 (car (list-tail list k)) の値に同じ。

symbol? obj
obj が symbol であれば #t を返し、さもなくば #f を返す。
pair? obj
obj が pair であれば #t を返し、さもなくば #f を返す。
null?
obj が 空リスト: () であれば #t を返し、さもなくば #f を返す。
list?
obj が list であれば #t を返し、さもなくば #f を返す。 list とは、cdr field でつながれた pair の連鎖で、空リスト()でおわるもの

length list
list の長さを返す。空リストの長さは 0
reverse list
list の要素を逆順にしたリストをつくって返す。
append list*
0個以上のlist(list*) の要素をすべて順にもつ list を作って返す。 要素順は、各々のリストの要素が list* の順に並んでいる。
例:(append '(1 2) '(3 4)) => (1 2 3 4)

memq obj, list
list の要素を調べて行き、 始めに obj と同じ(eq?で判定)ものがあった時点で、 その要素からのリストの残りの部分を返す。見つからない場合空リストを返す。
仲間として、 memv, member があり、また、連想リスト版として、 assq, assv, assoc も存在する。詳しくは こちら


99.10.6/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp