Next: Arrays, Up: Sequences Arrays Vectors [Contents][Index]
このセクションでは、任意の種類のシーケンスを許す関数を説明します。
この関数は、objectがリスト、ベクター、文字列、ブールベクター、文字テーブルの場合はt
、それ以外はnil
をreturnします。
この関数は、sequence内の要素の数をreturnします。sequenceがドットリストの場合、wrong-type-argument
エラーがシグナルされます。循環リストは無限ループを引き起こします。文字テーブルでは、Emacsの最大文字コードより、常に1大きい値がreturnされます。
関連する関数safe-length
については、Definition of safe-lengthを参照してください。
(length '(1 2 3)) ⇒ 3
(length ()) ⇒ 0
(length "foobar") ⇒ 6
(length [1 2 3]) ⇒ 3
(length (make-bool-vector 5 nil)) ⇒ 5
Text Representationsのstring-bytes
も参照してください。
ディスプレー上での文字列の幅を計算する必要がある場合、文字数だけを数えて各文字のディスプレー幅を計算しないlength
ではなく、string-width
(Size of Displayed Textを参照してください)を使用するべきです。
この関数は、indexによりインデックスづけされた、sequenceの要素をreturnします。indexの値として妥当なのは、0からsequenceの長さより1小さい数までの範囲の整数です。sequenceがリストの場合、範囲外の値はnth
と同じように振る舞います。Definition of nthを参照してください。それ以外の場合、範囲外の値はargs-out-of-range
エラーを引き起こします。
(elt [1 2 3 4] 2) ⇒ 3
(elt '(1 2 3 4) 2) ⇒ 3
;; elt
がどの文字をreturnするか明確にするためにstring
を使用。
(string (elt "1234" 2))
⇒ "3"
(elt [1 2 3 4] 4) error→ Args out of range: [1 2 3 4], 4
(elt [1 2 3 4] -1) error→ Args out of range: [1 2 3 4], -1
この関数は、aref
(Array Functionsい)とnth
(Definition of nthを参照してください)を一般化したものです。
この関数は、sequenceのコピーをreturnします。コピーは元のシーケンスと同じ型で、同じ要素が同じ順番でもちます。
コピーに新しい要素を格納するのは、元のsequenceに影響を与えず、その逆も真です。しかし新しいシーケンス内の要素がコピーされたものでない場合は、元のシーケンスの要素と同一(eq
)になります。したがって、コピーされたシーケンスを通じて見つかった要素を変更すると、この変更は元のシーケンスでも見ることができます。
シーケンスがテキストプロパティーをともなう文字列の場合、コピー内のプロパティーリスト自身もコピーとなり、元のシーケンスのプロパティーリストと共有はされません。しかし、プロパティーリストの実際の値は共有されます。Text Propertiesを参照してください。
この関数は、ドットリストでは機能しません。循環リストのコピーは、無限ループを起こすでしょう。
シーケンスをコピーする別の方法は、Building Listsのappend
、Creating Stringsのconcat
、Vector Functionsのvconcat
も参照してください。
(setq bar '(1 2)) ⇒ (1 2)
(setq x (vector 'foo bar)) ⇒ [foo (1 2)]
(setq y (copy-sequence x)) ⇒ [foo (1 2)]
(eq x y) ⇒ nil
(equal x y) ⇒ t
(eq (elt x 1) (elt y 1)) ⇒ t
;; 一方のシーケンスの要素を置き換え。
(aset x 0 'quux)
x ⇒ [quux (1 2)]
y ⇒ [foo (1 2)]
;; 共有された要素の内部を変更。
(setcar (aref x 1) 69)
x ⇒ [quux (69 2)]
y ⇒ [foo (69 2)]
Next: Arrays, Up: Sequences Arrays Vectors [Contents][Index]