[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ペアとリストはSchemeにおける最も基本的なデータ構造のひとつです。
Gaucheのコアは全ての標準のリスト手続きと、多くのScheme実装に見られる
便利な手続きのいくつかを提供します。それらで足りない場合は
さらに多くの手続きがsrfi-1
- List library、
util.list
- その他のリストライブラリ、
util.combinations
- 組み合わせ
といったモジュールで提供されています。
また、リストに限らないジェネリックなシーケンス/コレクションの操作が
gauche.collection
- コレクションフレームワークと
gauche.sequence
- シーケンスフレームワークで提供されています。
6.4.1 pairクラスとnullクラス | ||
6.4.2 リストの述語 | ||
6.4.3 リストの構築子 | ||
6.4.4 リストへのアクセスと変更 | ||
6.4.5 他のリスト手続き |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
リストを表す抽象クラスで、クラス<null>
とクラス<pair>
の親クラスです。
クラス<sequence>
を継承します。
循環リストやドットリストも<list>
クラスのインスタンスですが、
list?
は偽の値を返すことに注意して下さい。
(use srfi-1) (list? (circular-list 1 2)) ⇒ #f (is-a? (circular-list 1 2) <list>) ⇒ #t |
空リストのクラスです。()
がこのクラスの唯一のインスタンスです。
ペアのクラスです。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
[R5RS]
objがペアなら#t
を、そうでなければ#f
を返します。
[R5RS]
objが空リストなら#t
を、そうでなければ#f
を返します。
[R5RS]
objが正しいリストなら#t
を、そうでなければ#f
を返します。
この手続きはobjがドットリストや循環リストなら#fを返します。
SRFI-1(リストの述語)には更に、
proper-list?
、circular-list?
、dotted-list?
といった手続きが定義されています。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
[R5RS] obj1とobj2のペアを作成します。
(cons 'a 'b) ⇒ (a . b) |
(cons (cons obj1 obj2) obj3)
を返します。
連想リストの先頭に新しいエントリを加えるのに便利です。
(acons 'a 'b '((c . d))) ⇒ ((a . b) (c . d)) |
[SRFI-1] 長さlenの正規のリストを返します。引数fillが与えられていれば、各要素は fillになります。そうでなければ各要素の値は不定です。
(make-list 5 #t) ⇒ (#t #t #t #t #t) |
[R5RS] 要素がobj …であるリストを作成します。
(list 1 2 3) ⇒ (1 2 3) (list) ⇒ () |
list
とほぼ同じですが、最後の引数が作成されるリストの最後のペアのcdrになります。
SRFI-1ではこの手続きがcons*
という名で定義されています。
(list* 1 2 3) ⇒ (1 2 . 3) (list* 1) ⇒ 1 |
[SRFI-1] listの浅いコピーを行います。 listが循環リストの場合、この手続きは停止しません。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
[R5RS] それぞれpairのcarとcdrを返します。
[R5RS] pairのcarもしくはcdrをobjで置き換えます。
注: (setter car)
≡ set-car!
であり、
(setter cdr)
≡ set-cdr!
です。
…
[R5RS]
caar
≡ (car (car x))
,
cadr
≡ (car (cdr x))
, 等々。
対応するsetterも定義されています。
(let ((x (list 1 2 3 4 5))) (set! (caddr x) -1) x) ⇒ (1 2 -1 4 5) |
[R5RS] 正規のリストlistの長さを返します。 listがドットリストならばエラーが起きます。 listが循環リストの場合、この関数は無限ループします。
循環リストも取り扱う場合は、SRFI-1のlength+
を使って下さい
(種々のリスト処理ルーチン参照)。
[R5RS]
listのk番目のcdrを返します。listは
正規のリストでもドットリストでも循環リストでも構いません。
(listがドットリストの場合、最後のcdr
は無視されます)。
kの値が負であったりlistの長さ以上の場合、 fallback引数が与えられていればそれが返され、 そうでなければエラーが報告されます。
[R5RS+] listのk番目の要素を返します。listは 正規のリストでもドットリストでも循環リストでも構いません。
もしkがリストの長さを超えていたり、負数であった場合は通常はエラーが起こります。 しかし、オプショナルな引数fallbackが与えられていた場合は、エラーは起きず fallbackが返されます。これはGaucheの拡張です。
[SRFI-1] listの最後のペアを返します。listは 正規のリストかドットリストです。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
[R5RS] 渡されたリストの要素を繋げたリストを返します。最後の引数の部分以外は新しいセルがアロケート されて使われます。最後の引数は正規のリストである必要がありません。その場合、結果は正規でない リストとなります。
[SRFI-1] 渡されたリストの要素を繋げたリストを返します。最後の引数以外のリストのセルは、結果を 作成するために再利用されるかもしれません。 最後の引数は正規のリストである必要はありません。
[R5RS] listの各要素を逆順に持つリストを新しく作成して返します。
[SRFI-1] listの各要素を逆順に持つリストを返します。結果を作成するために、 listのセルは再利用されるかもしれません。
[R5RS]
listからobjを探します。もしlistのn番目の要素が
objと同一ならば、(list-tail list n)
を返します。
memq
は同一性の判定にeq?
を、memv
はeqv?
を、
member
はequal?
を使います。
objがlist中に見つからなければ#f
が返されます。
SRFI-1 (srfi-1
- List library) を使うと、member
は
オプショナルな同一性判定手続きを取るように拡張されます。
(memq 'a '(a b c)) ⇒ (a b c) (memq 'b '(a b c)) ⇒ (b c) (memq 'a '(b c d)) ⇒ #f (memq (list 'a) '(b (a) c)) ⇒ #f (memv 101 '(100 101 102)) ⇒ (101 102) |
[R5RS]
listの各要素はペアでなければなりません。
これらの手続きは、listの要素であるペアのうち、そのcarが
objと一致するペアを左から探して行きます。もし見付かればそのペアが、
見付からなければ#f
が返されます。
assq
は比較関数にeq?
を、assv
はeqv?を、
assoc
はequal?をそれぞれ用います。
SRFI-1 (srfi-1
- List library) を使うと、assoc
は
オプショナルな同一性判定手続きを取るように拡張されます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] |
This document was generated by Shiro Kawai on November, 22 2009 using texi2html 1.78.