シーケンス
Type: Function
Arguments: concatenate RESULT-TYPE &rest SEQUENCES
Package: lisp
File: sequence.l
(詳細不明)
使用例:
(concatenate 'string "^X-Status[ \t]*:[ \t]*" (car from) "[ \t]*$")
Type: Function
Arguments: copy-seq SEQUENCE
Package: lisp
File: builtin.l
SEQUENCEのコピーを作成して返します。元のSEQUENCEとはequalpだがeqではありません。
(copy-seq x) == (subseq x 0)
Type: Function
Arguments: count ITEM SEQUENCE &key :from-end :test :test-not :start :end :key
Package: lisp
File: sequence.l
ITEMとのテストを満足するSEQUENCE中の要素数を返します。結果は非負の整数です。
:from-end : 他の関数との互換性のために用意されたもので、結果に影響しません。
:test : テストを行う2項演算子
:start : テストする開始位置
:end : テストの終了位置
SeeAlso: count-if
SeeAlso: count-if-not
Type: Function
Arguments: count-if TEST SEQUENCE &key :from-end :start :end :key
Package: lisp
File: sequence.l
TESTを満足するSEQUENCE中の要素数を返します。結果は非負の整数です。
:from-end : 他の関数との互換性のために用意されたもので、結果に影響しません。
:test : テストを行う2項演算子
:start : テストする開始位置
:end : テストの終了位置
SeeAlso: count
SeeAlso: count-if-not
Type: Function
Arguments: count-if-not TEST SEQUENCE &key :from-end :start :end :key
Package: lisp
File: sequence.l
TESTを満足しないSEQUENCE中の要素数を返します。結果は非負の整数です。
:from-end : 他の関数との互換性のために用意されたもので、結果に影響しません。
:test : テストを行う2項演算子
:start : テストする開始位置
:end : テストの終了位置
SeeAlso: count
SeeAlso: count-if
Type: Function
Arguments: delete ITEM SEQUENCE &key :from-end :test :test-not :start :end :count :key
Package: lisp
File: builtin.l
SEQUENCEの中でITEMと一致するものを削除したSEQUENCEを返します。
元のSEQUENCEは変更されます。元のSEQUENCEを保持したければ、removeを使うこと。
:count : 削除する文字数を制限します。
:from-end : :countが指定された場合にのみ意味を持ちます。
nil SEQUENCEの先頭から削除します。
t SEQUENCEの後尾から削除します。
使用例:
;;; removeとdeleteを使ってみる。
(setq foo "abcabcdef") => "abcabcdef"
(remove #\b foo) => "acacdef"
foo => "abcabcdef"
(delete #\b foo) => "acacdef"
foo => "acacdef"
SeeAlso: remove
Type: Function
Arguments: delete-if PREDICATE SEQUENCE &key :from-end :start :end :count :key
Package: lisp
File: builtin.l
SEQUENCEの中でPREDICATEを満たすものを削除します。
SeeAlso: remove-if
Type: Function
Arguments: delete-if-not PREDICATE SEQUENCE &key :from-end :start :end :count :key
Package: lisp
File: builtin.l
SEQUENCEの中でPREDICATEを満たさないものを削除します。
SeeAlso: remove-if-not
Type: Function
Arguments: elt SEQUENCE INDEX
Package: lisp
File: builtin.l
SEQUENCEのINDEX番目の要素を返します。
INDEXは0を基底とします。なければnilを返します。
Type: Function
Arguments: every PREDICATE SEQUENCE &rest MORE-SEQUENCES
Package: lisp
File: sequence.l
SEQUENCEの先頭の要素から順番にPREDICATEを適用していき、PREDICATEが
nil を返すと、nilをすぐに返します。
全ての要素がPREDICATEを満たす場合、 t を返します。
MORE-SEQUNCESが与えられた時、SEQUENCEの中で最も短いものの終わりまで実行されます。
SeeAlso: some
SeeAlso: notevery
Type: Function
Arguments: fill SEQUENCE ITEM &key :start :end
Package: lisp
File: builtin.l
SEQUENCEのそれぞれをITEMに置換えます。元のSEQUENCEは置き換えられます。
使用例:
;;; シーケンスを作って、変更してみる。
(setq foo (make-sequence 'string 8 :initial-element #\a))
=> "aaaaaaaa"
(fill foo #\b :start 3 :end 4)
=> "aaabaaaa"
foo
=> "aaabaaaa"
Type: Function
Arguments: find ITEM SEQUENCE &key :from-end :test :test-not :start :end :key
Package: lisp
File: builtin.l
SEQUENCE の中で ITEM との :test を満たすものがあればそれを返します。なければ
nilを返します。
使用例:
;;; リストから'aを探してみる。
(find 'a '(e c a b))
=> a
Type: Function
Arguments: find-if PREDICATE SEQUENCE &key :from-end :start :end :key
Package: lisp
File: builtin.l
SEQUENCEの中でPREDICATEを満たすものがあればそれを返します。なければnilを返します。
Type: Function
Arguments: find-if-not PREDICATE SEQUENCE &key :from-end :start :end :key
Package: lisp
File: builtin.l
SEQUENCEの中でPREDICATEを満たさないものがあればそれを返します。なければ
nilを返します。
Type: Function
Arguments: length SEQUENCE
Package: lisp
File: builtin.l
sequence(文字列や、リスト、配列)の長さを求めます。
配列にfill-pointerがある場合は、そこまでの長さになります。
使用例:
(length "abcd") => 4
(length (list 1 2 3)) => 3
(length (make-array 7)) => 7
(length (make-array 7 :fill-pointer 4))
=> 4
Type: Function
Arguments: make-sequence TYPE SIZE &key :initial-element
Package: lisp
File: sequence.l
要素のタイプが type でサイズが size なシーケンスを作成して返します。
:initial-element が与えられた場合はそれぞれの項目はそれで初期化されます。
使用例:
;;; #\aが8文字の文字列を作ってみる
(make-sequence 'string 8 :initial-element #\a)
=> "aaaaaaaa"
(make-sequence 'list 4 :initial-element "abc")
=> (#1="abc" #1# #1# #1#)
Type: Function
Arguments: merge RESULT-TYPE SEQUENCE1 SEQUENCE2 PREDICATE &key KEY
Package: lisp
File: sequence.l
SEQUENCE1とSEQUENCE2を併合します。SEQUENCE1とSEQUENCE2は破壊されません。
PREDICATEによりSEQUENCE1とSEQUENCE2の値を比較し、非nilならば SEQUENCE1の値を
nil ならば SEQUENCE2の値を順にマージしていきます。
RESULT-TYPE : 結果となるシーケンスの型を指定します。
PREDICATE : シーケンス同士を比較する関数を指定します。
:key : 比較対照を取得する関数を指定します。
例
(merge 'list '(1 2 3 5 8) '(2 4 6) #'<) => (1 2 2 3 4 5 6 8)
(merge 'string "AbCF" "aBcd" #'char-lessp) => "AabBCcdF"
SeeAlso: stable-sort
Type: Function
Arguments: not-any PREDICATE SEQUENCE &rest MORE-SEQUENCES
Package: lisp
File: sequence.l
SEQUENCEの先頭の要素から順番にPREDICATEを適用していき、PREDICATEが
非nilな値を返すと、 nil をすぐに返します。
PREDICATEを満たす要素が見つからない時は t を返します。
MORE-SEQUNCESが与えられた時、SEQUENCEの中で最も短いものの終わりまで実行されます。
SeeAlso: notevery
SeeAlso: some
Type: Function
Arguments: notevery PREDICATE SEQUENCE &rest MORE-SEQUENCES
Package: lisp
File: sequence.l
SEQUENCEの先頭の要素から順番にPREDICATEを適用していき、PREDICATEが
nil を返すと、t をすぐに返します。
全ての要素がPREDICATEを満たす場合、 nil を返します。
MORE-SEQUNCESが与えられた時、SEQUENCEの中で最も短いものの終わりまで実行されます。
SeeAlso: notany
SeeAlso: every
Type: Function
Arguments: nreverse SEQUENCE
Package: lisp
File: builtin.l
SEQUENCEを逆順にした新しいSEQUENCEを作成して返します。元のsequenceは破壊
されます。
使用例:
(setq lst '(a b c))
=> (a b c)
(nreverse lst)
=> (c b a)
lst
=> (a)
SeeAlso: reverse
Type: Function
Arguments: nsubstitute NEWITEM OLDITEM SEQUENCE &key :from-end :test :test-not :start :end :count :key
Package: lisp
File: sequence.l
SEQUENCE に対して OLDITEM との :test を満足する要素を NEWITEM に置き換えた列を返します。
元の SEQUENCE は変更されます。
:test : テストを行う2項演算子
:start : 開始位置。デフォルトは0で非負の整数
:end : 終了位置。デフォルトはnilで、nilの場合は列の長さを指定した
場合と等しい動作。
:count : 置き換える最大の回数。
:from-end : nil ならば先頭から、non-nil で末尾から置換を行う。 :count
が与えられた時のみ意味を持つ。
SeeAlso: nsubst
SeeAlso: nsubstitute
SeeAlso: nsubstitute-if
SeeAlso: nsubstitute-if-not
SeeAlso: substitute
SeeAlso: nsbulis
Type: Function
Arguments: nsubstitute-if NEWITEM TEST SEQUENCE &key :from-end :start :end :count :key
Package: lisp
File: sequence.l
SEQUENCEに対してTESTを満足する要素をNEWITEMに置き換えた列を返します。
元のSEQUENCEは変更されます。
TEST : テストを行う単項演算子
:start : 開始位置。デフォルトは0で非負の整数
:end : 終了位置。デフォルトはnilで、nilの場合は列の長さを指定した
場合と等しい動作。
:count : 置き換える最大の回数。
:from-end : nil ならば先頭から、 non-nil で末尾から置換を行う。 :count
が与えられた時のみ意味を持つ。
SeeAlso: nsubst-if
SeeAlso: nsubstitute
SeeAlso: nsubstitute-if-not
SeeAlso: substitute-if
Type: Function
Arguments: nsubstitute-if-not NEWITEM TEST SEQUENCE &key :from-end :start :end :count :key
Package: lisp
File: sequence.l
SEQUENCEに対してTESTを満足しない要素をNEWITEMに置き換えた列を返します。
元のSEQUENCEは変更されます。
TEST : テストを行う単項演算子
:start : 開始位置。デフォルトは0で非負の整数
:end : 終了位置。デフォルトはnilで、nilの場合は列の長さを指定した
場合と等しい動作。
:count : 置き換える最大の回数。
:from-end : nil ならば先頭から、 non-nil で末尾から置換を行う。 :count
が与えられた時のみ意味を持つ。
SeeAlso: nsubst-if-not
SeeAlso: nsubstitute
SeeAlso: nsubstitute-if
SeeAlso: substitute-if-not
Type: Function
Arguments: position ITEM SEQUENCE &key :from-end :test :test-not :start :end :key
Package: lisp
File: builtin.l
SEQUENCE の中で ITEM との :test を満たすものがあればそのインデックスを返します。
なければ nil を返します。
使用例:
;;; リストの中から'aのインデックスを調べる
(position 'a '(e c a b))
=> 2
Type: Function
Arguments: position-if PREDICATE SEQUENCE &key :from-end :start :end :key
Package: lisp
File: builtin.l
SEQUENCEの中でPREDICATEを満たすものがあればそのインデックスを返します。
なければnilを返します。
Type: Function
Arguments: position-if-not PREDICATE SEQUENCE &key :from-end :start :end :key
Package: lisp
File: builtin.l
SEQUENCEの中でPREDICATEを満たさないものがあればそのインデックスを返します。
なければnilを返します。
Type: Function
Arguments: reduce FUNCTION SEQUENCE &key :from-end :start :end :initial-value
Package: lisp
File: sequence.l
2項演算子であるFUNCTIONで、SEQUENCEに対して畳み込みを行います。
FUNCTION : 2項演算子。
:from-end : nil なら先頭から、non-nil なら最後の要素から畳み込みを行います。
:start : 畳み込みを行う SEQUENCE の開始インデックスです。デフォルトは 0 です。
:from-end が non-nil なら終了インデックスになります。
:END : 畳み込みを行う SEQUENCE の終了インデックスです。デフォルトは nil です。
:from-end が non-nil なら開始インデックスになります。
:INITIAL-VALUE : non-nil ならばこの値を初期値として使用します。
(reduce #'- '(1 2 3)) = (- (- 1 2) 3)
(reduce #'- '(1 2 3) :initial-value 10) = (- (- (- 10 1) 2) 3)
(reduce #'- '(1 2 3) :from-end t :initial-value 10) = (- 1 (- 2 (- 3 10)))
Type: Function
Arguments: remove ITEM SEQUENCE &key :from-end :test :test-not :start :end :count :key
Package: lisp
File: builtin.l
SEQUENCEの中でITEMと一致するものを削除したSEQUENCEを返します。
元のSEQUENCEはそのまま。元のSEQUENCEを変更したければ、deleteを使うこと。
:count : 削除する文字数を制限します。
:from-end : :countが指定された場合にのみ意味を持ちます。
nil SEQUENCEの先頭から削除します。
t SEQUENCEの後尾から削除します。
使用例:
;;; removeとdeleteを使ってみる。
(setq foo "abcabcdef") => "abcabcdef"
(remove #\b foo) => "acacdef"
foo => "abcabcdef"
(delete #\b foo) => "acacdef"
foo => "acacdef"
SeeAlso: delete
Type: Function
Arguments: remove-if PREDICATE SEQUENCE &key :from-end :start :end :count :key
Package: lisp
File: builtin.l
SEQUENCEの中でPREDICATEを満たすものを削除したSEQUENCEを返します。
元のSEQUENCEはそのまま。
SeeAlso: delete-if
Type: Function
Arguments: remove-if-not PREDICATE SEQUENCE &key :from-end :start :end :count :key
Package: lisp
File: builtin.l
SEQUENCEの中でPREDICATEを満たさないものを削除したSEQUENCEを返します。
元のSEQUENCEはそのままです。
SeeAlso: delete-if-not
Type: Function
Arguments: replace SEQUENCE1 SEQUENCE2 &key :start1 :end1 :start2 :end2
Package: lisp
File: builtin.l
SEQUENCE1 を SEQUENCE2 で置換します。元の SEQUENCE は置き換えられます。
SEQUENCE1 の :start1-:end1 の位置に、 SEQUENCE2 の :start2-:end2 を挿入
します。
使用例:
(setq foo (make-sequence 'string 8 :initial-element #\a))
=> "aaaaaaaa"
(setq bar (make-sequence 'string 3 :initial-element #\b))
=> "bbb"
(replace foo bar)
=> "bbbaaaaa"
(replace foo bar :start1 4 :end1 5)
=> "bbbabaaa"
Type: Function
Arguments: reverse SEQUENCE
Package: lisp
File: builtin.l
SEQUENCEを逆順にした新しいSEQUENCEを作成して返します。元のsequenceはそのままです。
SeeAlso: nreverse
Type: Function
Arguments: some PREDICATE SEQUENCE &rest MORE-SEQUENCES
Package: lisp
File: sequence.l
SEQUENCEの先頭の要素から順番にPREDICATEを適用していき、PREDICATEが
非nilな値を返すと、その値をSOMEの戻り値としてすぐに終了します。
PREDICATEを満たす要素が見つからない時は nil を返します。
MORE-SEQUNCESが与えられた時、SEQUENCEの中で最も短いものの終わりまで実行されます。
SeeAlso: every
SeeAlso: notany
Type: Function
Arguments: sort SEQUENCE PREDICATE &key :key
Package: lisp
SEQUENCE を PREDICATE に従った順番に並び替えたものを返します。元の SEQUENCE
は変更されます。 sort は安定であることは保証されません。安定なソートが必要
なときは stable-sort を使いましょう。
SEQUENCE : ソートするシーケンスを指定します。
PREDICATE : 比較関数を指定します。
:key : 比較対象を取得する関数を指定します。
使用例:
(setq *test-seq* '(("foo") ("bar") ("hoge")))
=> (("foo") ("bar") ("hoge"))
(setq *test-seq* (sort *test-seq* #'string-lessp :key #'car))
=> (("bar") ("foo") ("hoge"))
*test-seq*
=> (("bar") ("foo") ("hoge"))
(setq *test-seq* '(("foo") ("bar") ("hoge")))
=> (("foo") ("bar") ("hoge"))
(sort *test-seq* #'string-lessp :key #'car)
=> (("bar") ("foo") ("hoge"))
*test-seq*
=> (("foo") ("hoge"))
参考:
[xyzzy:06221] (こっそり)バージョンアップのお知らせ
・sort のアルゴリズムを quick から merge に変更
(比較回数が少ない分、merge の方が速いっぽい)。
結果、stable-sort と同じになった(が、依存しないように)。
従来は *たまたま* (eq list (sort list)) だったが、
そうではなくなったので注意すること。
SeeAlso: stable-sort
Link: [xyzzy:06221]
Type: Function
Arguments: stable-sort SEQUENCE PREDICATE &key :key
Package: lisp
File: builtin.l
SEQUENCE を PREDICATE に従った順番に並び替えたものを返します。元の SEQUENCE
は変更されます。 stable-sort は安定なソートを行います。つまり PREDICATE によっ
て同順と見なされる要素間の順序は、ソート前と同じであることが保証されます。
SEQUENCE : ソートするシーケンスを指定します。
PREDICATE : 比較関数を指定します。
:key : 比較対象を取得する関数を指定します。
使用例:
(setq *test-seq* '(("foo") ("bar") ("hoge")))
=> (("foo") ("bar") ("hoge"))
(setq *test-seq* (stable-sort *test-seq* #'string-lessp :key #'car))
=> (("bar") ("foo") ("hoge"))
*test-seq*
=> (("bar") ("foo") ("hoge"))
(setq *test-seq* '(("foo") ("bar") ("hoge")))
=> (("foo") ("bar") ("hoge"))
(stable-sort *test-seq* #'string-lessp :key #'car)
=> (("bar") ("foo") ("hoge"))
*test-seq*
=> (("foo") ("hoge"))
SeeAlso: sort
Link: [xyzzy:06221]
Type: Function
Arguments: subseq SEQUENCE START &optional END
Package: lisp
File: builtin.l
SEQUENCEのSTART番目からENDもしくは最後までの新しいsequenceを返します。
Type: Function
Arguments: substitute NEWITEM OLDITEM SEQUENCE &key :from-end :test :test-not :start :end :count :key
Package: lisp
File: sequence.l
SEQUENCE に対して OLDITEM との :test を満足する要素を NEWITEM に置き換え
た列を返します。元の SEQUENCE は変更されませんが、戻り値と一部を共有する
かもしれません。
:test : テストを行う2項演算子
:start : 開始位置。デフォルトは0で非負の整数
:end : 終了位置。デフォルトはnilで、nilの場合は列の長さを指定した
場合と等しい動作。
:count : 置き換える最大の回数。
:from-end : nil ならば先頭から、non-nil で末尾から置換を行う。 :count
が与えられた時のみ意味を持つ。
SeeAlso: substitute-if
SeeAlso: substitute-if-not
SeeAlso: nsubstitute
SeeAlso: subst
SeeAlso: substitute-string
SeeAlso: sublis
Type: Function
Arguments: substitute-if NEWITEM TEST SEQUENCE &key :from-end :start :end :count :key
Package: lisp
File: sequence.l
SEQUENCEに対してTESTを満足する要素をNEWITEMに置き換えた列を返します。
元のSEQUENCEは変更されませんが、戻り値と一部を共有するかもしれません。
TEST : テストを行う単項演算子
:start : 開始位置。デフォルトは0で非負の整数
:end : 終了位置。デフォルトはnilで、nilの場合は列の長さを指定した
場合と等しい動作。
:count : 置き換える最大の回数。
:from-end : nil ならば先頭から、non-nil で末尾から置換を行う。 :count
が与えられた時のみ意味を持つ。
SeeAlso: subst-if
SeeAlso: substitute
SeeAlso: substitute-if-not
SeeAlso: nsubstitute-if
Type: Function
Arguments: substitute-if-not NEWITEM TEST SEQUENCE &key :from-end :start :end :count :key
Package: lisp
File: sequence.l
SEQUENCEに対してTESTを満足しない要素をNEWITEMに置き換えた列を返します。
元のSEQUENCEは変更されませんが、戻り値と一部を共有するかもしれません。
TEST : テストを行う単項演算子
:start : 開始位置。デフォルトは0で非負の整数
:end : 終了位置。デフォルトはnilで、nilの場合は列の長さを指定した
場合と等しい動作。
:count : 置き換える最大の回数。
:from-end : nil ならば先頭から、non-nil で末尾から置換を行う。 :count
が与えられた時のみ意味を持つ。
SeeAlso: subst-if-not
SeeAlso: substitute
SeeAlso: substitute-if
SeeAlso: nsubstitute-if-not