Lisp写経 2回目
Wednesday, November 11, 2009 3:41:59 PM
ベクタの作成
vector, make-arrayで作成できる
vectorで作成したベクタはvector-pop, vector-pushで変更できない。
make-arrayに:fill-pointerオプションを指定するとvector-pop, vector-pushで要素の変更が可能なベクタを作成できる。
#(1 2 3)とリテラル表記でもベクタは作成できるが、リテラルオブジェクトを変更した場合の処理は定義されてないので変更すべきではないらしい。
可変サイズのベクタを作成するにはmake-arrayで:adjustable tを追加する。
vector-push-extendを使用する。vector-pushと違い要素が一杯の場合は自動的に領域を拡張する
fill-pointerが設定されていなくてもeltで要素を指定してsetfすることができる
EmacsだからなのかSlime環境だからかはわからないが、ミニバッファに関数の取れる引数が表示されることに今ごろ気づいた
こんな感じ
vector, make-arrayで作成できる
(vector 1 2 3) → #(1 2 3) (make-array 5 :initial-element 1 :fill-pointer 0) -> #(1 1 1 1 1)
vectorで作成したベクタはvector-pop, vector-pushで変更できない。
make-arrayに:fill-pointerオプションを指定するとvector-pop, vector-pushで要素の変更が可能なベクタを作成できる。
#(1 2 3)とリテラル表記でもベクタは作成できるが、リテラルオブジェクトを変更した場合の処理は定義されてないので変更すべきではないらしい。
可変サイズのベクタを作成するにはmake-arrayで:adjustable tを追加する。
vector-push-extendを使用する。vector-pushと違い要素が一杯の場合は自動的に領域を拡張する
fill-pointerが設定されていなくてもeltで要素を指定してsetfすることができる
(defvar *x* #(1 2 3)) (setf (elt *x* 1) 20) → #(1 20 3)
EmacsだからなのかSlime環境だからかはわからないが、ミニバッファに関数の取れる引数が表示されることに今ごろ気づいた
こんな感じ
(make-array arg0 &key adjustable element-type initial-element initial-contents
fill-pointer displaced-to displaced-index-offset)



How to use Quote function: