配列

配列 の Common Lisp

15個の演習

配列について

配列は、Common Lispでとてもよく使われるデータ型です。配列はconsセルの並びからできています。それぞれのcarが配列の要素で、それぞれのcdrは、次のconsセルか、終端となるアトムのどちらかです。

空の配列で終わる配列を「正しい配列」と呼びます。

空の配列ではないアトムで終わる配列は「ドット付き配列」と呼びます(表示のされ方による呼び名で、(cons 'a 'b) ;=> (a . b)のように表示されます)。

また、配列の中のあるconsセルのcdrが、より後ろにあるconsセルを指していると、その配列は循環配列になります。例えば、次のとおりです:(let ((x (list 1))) (setf (cdr x) x) (write x :stream t :circle t) :done)。循環配列を扱うときは注意してください。*print-circle*をtに束縛せずに表示すると、無限ループに陥り、REPLが固まってしまいます(この例では、writeに:circle tを指定することで、*print-circleがtに束縛されます)。

配列の結合

appendは、1つや0個の場合も含め、いくつでも配列を渡して呼び出せます:

(append '(a b c) '(1 2 3)) ; => (A B C 1 2 3)
(append '(a b c) '()))     ; => (A B C)
(append '(a b c))          ; => (A B C)
(append)                   ; => ()

appendの代わりにnconcを使うこともできます。結果は同じですが、配列を書き換えてしまうという副作用があります。nconcを使うときは、思わぬ結果になることがあるので気をつけてください。

GitHubで編集 リンクは新しいウィンドウまたはタブで開きます

配列を学習する

練習はロックされています

配列を練習するには、あと5個の演習のロックを解除してください