一覧にある関数はとりあえず、使えそうな関数です。
現在のところ、確認は、2.6.10で行っています。
リストとペア | ||
---|---|---|
( pair expr) | boolean | |
ペアか? exprがペアならば #t 、そうでなければ、#fを返す。 (pair? 1) #f (pair? (cons 1 2)) #t (pair? (list 1 2)) #t (pair? '(1 2)) #t (pair? '(1 . 2)) #t (pair? '()) #f | ||
( null? expr) | boolean | |
空リストか? 空リスト '() ならば #t 、そうでなければ、#f を返す。 (null? '()) #t (null? "abc") #f (null? '(a b)) #f (null? (cdr '(a))) #t | ||
nil | 空リスト | |
空リストを表す Schemeでは、nilはあまり使われないようです。 | ||
( cons a d ) | ペア | |
新しいペアを作る 左側に a 、右側に d を持つ新しいペアを作る返す。 (cons 1 2) (1 . 2) (cons 1 '()) (1) (cons 1 '(1 2)) (1 1 2) (cons '(1 2) '(3 4)) ((1 2) 3 4) | ||
( car expr) | --- | |
ペアの最初の要素 ペアの最初の要素を返します。ペアがリストならば、リストの最初の要素を返すことになります。 (car '(1 . 2)) 1 (car '(1 2)) 1 (car '( (a b) c d)) (a b) | ||
( cdr expr) | --- | |
ペアの二番目の要素 ペアの二番目の要素を返します。ペアがリストならば、二番目以降の要素でできたリストを返します。 (cdr '(1 . 2)) 2 (cdr '(1 2)) (2) (cdr '(1 2 3)) (2 3) (cdr '(1)) () (cdr '()) error になる | ||
( lis?t expr) | --- | |
リストか? exprがリストならば #t 、そうでなければ #f を返します。 (list? 1) #f (list? '(1 2 3)) #t (list? '(1 . 2)) #f (list? '(1 . (2 . 3))) #f (list? '(1 . (2 . '()))) #t (list? '()) #t | ||
( list [ expr ]*) | リスト | |
リストを作る exprを要素に持つリストを作成して返却する。 (list 1 2 3) (1 2 3) (list "abc") ("abc") (list '()) (()) (list) () | ||
( list* [ expr ]+ tail) | ---- | |
ペア連鎖を作る exprからなるペア連鎖を作るが、最後の連鎖の二番目の要素をtailとする。この値を返す。 (list* 1 2) (1 . 2) (list* 1 2 3) (1 2 . 3) 最初がペアがひとつだけ作られる例です。
(list* 1 2 3 4 5 '())
(1 2 3 4 5)
(list 1 2 3 4 5) と同じです。
(list* 1 2 '(3 4 5))
(1 2 3 4 5)
これが多分、一番標準的な使い方。tailのリストの前にexprを順に追加したリストになります。 (list* 1) 1この場合は多分、仕様外でしょう。 | ||
( length lst) | 数値 | |
リストの要素の数 リストの要素の数を返します。空リストと () の場合には 0を返します。 (length '()) 0 (length '(1 2 3)) 3 (length '(1 (2 3) 4)) 3 | ||
( list-ref lst pos) | --- | |
リストの指定要素 リストlstのpos番目の要素を返します。位置は先頭を0として数えます。 (list-ref (list 'a 'b 'c) 0) a (list-ref (list 'a 'b 'c) 1) b (list-ref (list 'a 'b 'c) 2) c (list-ref (list 'a 'b 'c) 3) エラーになります まるで配列のようにリストを扱えます。構造上後ろに行くほど遅くなりますが… (list-ref '(1 . 2) 0) 1 (list-ref '(1 2 . 3) 1) 2 実際はペアの連鎖に対しても動作するようです。 | ||
( list-tail lst pos) | --- | |
指定位置以降のリスト リスト lst の pos 番目以降の要素からなるリスト。先頭の要素は0番目とする。 (list-tail '(1 2 3 4 5 6 7) 0) (1 2 3 4 5 6 7) (list-tail '(1 2 3 4 5 6 7) 3) (4 5 6 7) (list-tail '(1 2 3 4 5 6 7) 6) (7) (list-tail '(1 2 3 4 5 6 7) 7) () (list-tail '(1 2 3 4 5 6 7) 8) エラーになります (list-tail '() 0) () (list-tail (list* 1 2 3) 0) (1 2 . 3) (list-tail (list* 1 2 3) 1) (2 . 3) (list-tail (list* 1 2 3) 2) 3 (list-tail (list* 1 2 3) 3) エラーになります (list-tail (list* 1 2 '()) 2) () | ||
( append | lst )リスト | |
リストの連結 引数のリストの要素からなるリストを返す。
(append '(1 2))
((1 2))
本当は、(1 2) のはず。これは困った。 (append '(1 2) '(3 4 5) '(6 7)) (1 2 3 4 5 6 7) (append '(1 2) '()) (1 2) (append '(1 2) '() '(3 4)) (1 2 3 4) (append '(1 2) '(3 (4 5)) '(6 7)) (1 2 3 (4 5) 6 7) | ||
( append | lst tail)--- | |
リストの連結 引数 lst の要素からなるペア連鎖をつくり、最後のペアの二番目の要素を tail とする。tailが()ならば通常のappendと同じ。 (append '(1 2) 3) (1 2 . 3) (append '(1 2) '(3 4) 5) (1 2 3 4 . 5) (append '(1 2) '()) (1 2) (append '(1 2) '(3 4) '()) (1 2 3 4) こちらの記法では lst がひとつの場合のバグが出ないようです。tail に'()を書けば、appendのバグ回避に使えそうです。 | ||
( reverse lst) | リスト | |
リストの要素のならびを逆にする lst の要素の並びを逆にして返却します。 (reverse '(1 2 3 4 5 6 7)) (7 6 5 4 3 2 1) (reverse '()) エラーになります lstが () のときにエラーになるのは、痛いです。 | ||
( map proc | lst )リスト | |
リスト要素の繰り評価 lst の要素一つ一つに対して、それを引数に proc を評価し、結果をリストとして返す。 (map not '(#t #f #t)) (#f #t #f) (map + '(1 2 3) '(4 5 6)) (5 7 9) (map + '() '()) () (map (lambda (x y) (* x y) ) '(2 4 6) '(1 3 5) ) (2 12 30) | ||
( for-each | lst )--- | |
リストの要素に関数を繰り返し適用 lstの要素を順に取り出し、それを引数としてprocを実行する。 | ||
( member v lst) | -- | |
要素の検索 lst の要素の先頭から、v に等しい要素を見つけ、その要素以降を要素とするリストを返却する。 (member "神奈川" '("東京" "大阪" "神奈川" "新潟")) ("神奈川" "新潟") (member "福岡" '("東京" "大阪" "神奈川" "新潟")) #f | ||
( memv v lst) | ---- | |
要素の検索 lst の要素の先頭から、v に等しい要素を見つけ、その要素以降を要素とするリストを返却する。 (memv 3 '(1 2 3 4)) (3 4) (memv 5 '(1 2 3 4)) #f (memv "神奈川" '("東京" "大阪" "神奈川" "新潟")) #f | ||
( memq v lst) | ---- | |
要素の検索 lst の要素の先頭から、v に等しい要素を見つけ、その要素以降を要素とするリストを返却する。 (memq 3 '(1 2 3 4)) #f (memq "神奈川" '("東京" "大阪" "神奈川" "新潟")) #f (define a 4) a (memq a (list 1 2 3 a 5 6)) (4 5 6) (define a 4) a (define b a) b (memq a (list 1 2 3 b 5 6)) (4 5 6) | ||
( assoc v lst) | ---- | |
連想リストの検索 その要素がすべてペアであるリスト lst を順に検索し、要素のペアの先頭要素が vに等しければ、検索を中止し、そのペアを返却する。 (assoc 2 '((1 . "1st") (2 . "2nd") (3 . "3rd"))) (2 . "2nd") (assoc 4 '((1 . "1st") (2 . "2nd") (3 . "3rd"))) #f (assoc 2 '((1 "1st" "ss") (2 "2nd" "tt") (3 "3rd" "nn"))) (2 "2nd" "tt") | ||
( assv v lst) | --- | |
連想リストの検索 その要素がすべてペアであるリスト lst を順に検索し、要素のペアの先頭要素が vに等しければ、検索を中止し、そのペアを返却する。 (assv 2 '((1 "1st") (2 "2nd") (3 "3rd"))) (2 "2nd") (assv 4 '((1 "1st") (2 "2nd") (3 "3rd"))) #f (assv "大阪" '(("東京 "1st" ) ("大阪" "2nd") ("名古屋" "3rd"))) #f (define a "大阪") a (assv a (list '("東京 "1st" ) (list a "2nd") '("名古屋" "3rd"))) ("大阪" "2nd") | ||
( assv v lst) | --- | |
連想リストの検索 その要素がすべてペアであるリスト lst を順に検索し、要素のペアの先頭要素が vに等しければ、検索を中止し、そのペアを返却する。 (assq 2 '((1 "1st") (2 "2nd") (3 "3rd"))) #f (define a "大阪") a (assv a (list '("東京 "1st" ) (list a "2nd") '("名古屋" "3rd"))) ("大阪" "2nd") | ||
( caar v ) | ||
(car (car v)) 最初の要素のリストの最初の要素。
以降は、car と cdr の組み合わせの略記法関数が続きます。
(caar '((11 12) (21 22) (31 32)))
11
| ||
( cadr v ) | ||
(car (cdr v)) リストの二番目の要素。
(cadr '( 1 2 3 4))
2
| ||
( cdar v ) | ||
(cdr (car v)) 先頭の要素のリストの二番目以降のリスト。
(cdar '( (11 12 13) (21 22 23) (31 32 33)))
(12 13)
| ||
( cddr v ) | ||
(cdr (cdr v)) 三番目の要素以降からなるリスト。
(cddr '(1 2 3 4 5 6 7))
(3 4 5 6 7)
| ||
( caaar v ) | ||
(car (car (car v))) 先頭の先頭の先頭の要素。
(caaar '( ((111 112 113) (121 122 123) )
( (211 212 113) (221 222 223) )
)
)
111
| ||
( caadr v ) | ||
(car (car (cdr v))) 二番目の要素のリストの先頭
(caadr '( (11 12) (21 22) (31 32) ) )
21
| ||
( cadr v ) | ||
(car (cdr (car v))) 先頭のリストの二番目の要素
(cadar '( (11 12) (21 22) (31 32) ) )
12
| ||
( caddr v ) | ||
(car (cdr (cdr v))) 三番目の要素
(caddr '( 1 2 3 4))
3
| ||
( cdaar v ) | ||
(cdr (car (car v))) 先頭の先頭の二番目以降のリスト
(cdaar '( ( (111 112 113) (121 122 123) (131 132 133) )
( (211 212 213) (221 222 223) (231 232 233) )
( (311 312 313) (321 322 323) (331 332 333) )
)
)
(112 113)
| ||
( cdadr v ) | ||
(cdr (car (cdr v))) 二番目のリストの二番目以降
(cdadr '( (11 12 13) (21 22 23) (31 32 33) ) )
(22 23)
| ||
( cddar v ) | ||
(cdr (cdr (car v))) 先頭のリストの三番目以降
(cddar '( (11 12 13 14) (21 22 23 24) (31 32 33 34) ) )
(13 14)
| ||
( cdddr v ) | ||
(cdr (cdr (cdr v))) 4番目以降の要素のリスト
(cdddr '(1 2 3 4 5 6 7))
(4 5 6 7)
| ||
( caaaar v ) | ||
(car (car (car (car v)))) 先頭の先頭の先頭の先頭の要素。
(caaaar '( ( ( (1111 1112) (1121 1122)
)
( (1211 1212) (1221 1222)
)
)
( ( (2111 2112) (2121 2122)
)
( (2211 2212) (2221 2222)
)
)
)
)
1111
| ||
( caaadr v ) | ||
(car (car (car (cdr v)))) 二番目のリストの先頭の先頭
(caaadr '( ( (111 112 113) (121 122 123) (131 132 133) )
( (211 212 213) (221 222 223) (231 232 233) )
( (311 312 313) (321 322 323) (331 332 333) )
)
)
211
| ||
( caadar v ) | ||
(car (car (cdr (car v)))) 先頭のリストの二番目の先頭
(caadar '( ( (111 112 113) (121 122 123) (131 132 133) )
( (211 212 213) (221 222 223) (231 232 233) )
( (311 312 313) (321 322 323) (331 332 333) )
)
)
121
| ||
( caaddr v ) | ||
(car (car (cdr (cdr v)))) 三番目のリストの先頭
(caaddr '( (11 12 13) (21 22 23) (31 32 33) (41 42 43) ))
31
| ||
( cadaar v ) | ||
(car (cdr (car (car v)))) 先頭の先頭の二番目の要素
(cadaar '( ( (111 112 113) (121 122 123) (131 132 133) )
( (211 212 213) (221 222 223) (231 232 233) )
( (311 312 313) (321 322 323) (331 332 333) )
)
)
112
| ||
( cadadr v ) | ||
(car (cdr (car (cdr v)))) 二番目のリストの二番目
(cadadr '( (11 12 13) (21 22 23) (31 32 33) (41 42 43) ))
22
| ||
( caddar v ) | ||
(car (cdr (cdr (car v)))) 先頭のリストの三番目の要素
(caddar '( (11 12 13) (21 22 23) (31 32 33) (41 42 43) ))
13
| ||
( cadddr v ) | ||
(car (cdr (cdr (cdr v)))) 四番目の要素
(cadddr '(1 2 3 4 5 6 7))
4
| ||
( cdaaar v ) | ||
(cdr (car (car (car v)))) 先頭の先頭の先頭リストのの二番目以降のリスト
(cdaaar '( ( ( (1111 1112 1113) (1121 1122 1123)
)
( (1211 1212 1213) (1221 1222 1223)
)
)
( ( (2111 2112 2113) (2121 2122 2123)
)
( (2211 2212 2213) (2221 2222 2223)
)
)
)
)
(1112 1113)
| ||
( cdaadr v ) | ||
(cdr (car (car (cdr v)))) 二番目のリストの先頭の二番目以降のリスト
(cdaadr '( ( (111 112 113) (121 122 123) (131 132 133) )
( (211 212 213) (221 222 223) (231 232 233) )
( (311 312 313) (321 322 323) (331 332 333) )
)
)
(212 213)
| ||
( cdadar v ) | ||
(cdr (car (cdr (car v)))) 先頭のリストの二番目のリストの二番目以降の要素でできたリスト
(cdadar '( ( (111 112 113) (121 122 123) (131 132 133) )
( (211 212 213) (221 222 223) (231 232 233) )
( (311 312 313) (321 322 323) (331 332 333) )
)
)
(122 123)
| ||
( cdaddr v ) | ||
(cdr (car (cdr (cdr v)))) 三番目のリストの二番目以降の要素からなるリスト
(cdaddr '( (11 12 13) (21 22 23) (31 32 33) (41 42 43) ))
(32 33)
| ||
( cddaar v ) | ||
(cdr (cdr (car (car v)))) 先頭の先頭のリストの三番目以降の要素からなるリスト。
(cddaar '( ( (111 112 113 114) (121 122 123 124) (131 132 133 134) )
( (211 212 213 214) (221 222 223 224) (231 232 233 234) )
( (311 312 313 314) (321 322 323 324) (331 332 333 334) )
)
)
(113 114)
| ||
( cddadr v ) | ||
(cdr (cdr (car (cdr v)))) 二番目のリストの三番目以降の要素からなるリスト
(cddadr '( (11 12 13 14) (21 22 23 24) (31 32 33 34) (41 42 43 44) ))
(23 24)
| ||
( cdddar v ) | ||
(cdr (cdr (cdr (car v)))) 先頭のリストの四番目以降の要素からなるリスト
(cdddar '( (11 12 13 14 15) (21 22 23 24 25) (31 32 33 34 35) (41 42 43 44 45) ))
(14 15)
| ||
( cddddr v ) | ||
(cdr (cdr (cdr (cdr v)))) 五番目以降の要素からなるリスト
(cddddr '(1 2 3 4 5 6 7))
(5 6 7)
| ||
( last-pair pair ) | ||
最後のペア リストの最後のペアを返します。 (last-pair '( 1 2 3 4 5)) (5) (last-pair '( 1 2 3 4 5 . 6)) (5 . 6) (last-pair '( (11 12 13) (21 22 23) (31 32 33))) (31 32 33) (car (last-pair '( 1 2 3 4 5))) 5 | ||
( make-list k v) | ||
指定個数の同一要素からなるリスト k 個の v を要素とするリストを作成し、返します。 (make-list 4 "abc") ("abc" "abc" "abc" "abc") (make-list 0 "abc") () |