リスト構造にまつわる関数色々
このページでは、リスト構造にまつわる関数をいくつかまとめて紹介します。 詳しくは
こちら
。
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
これらは、
car
と
cdr
を組み合わせたものです。 例えば、
caddr
は、
(define (caddr x) (car (cdr (cdr x))))
としてつくることも出来ます。
list-tail
list k
list
の
k
番目以降のリストを返す。
(list-tail list 0)
は
list
をそのまま返す。
list-ref
list k
list
の
k
番目の要素を返す。
(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