Lisp文字列の配列は?
文字列が、文字の配列だとすると・・・文字列の配列はどうなるのか?
最初に、文字列に対してarray-total-sizeとかを使ってみる。
>(array-total-size "This is a pen.") 14 >(array-rank "This is a pen.") 1 >(array-dimension "This is a pen." 0) 14
なるほど。。。array-rank というのは、どうやら「何次元配列か」というのを教えてくれる関数。やはり、文字列は1次元配列、つまりベクタということになる。ベクタの場合は、(array-dimension $ARRAY 0)と(array-total-size $ARRAY)は同じことか。
> (setq array-1 #2A(("AAA" "BB")("C" "DDDD"))) #2A(("AAA" "BB") ("C" "DDDD")) > array-1 #2A(("AAA" "BB") ("C" "DDDD")) > (array-total-size array-1) 4 > (array-dimension array-1 0) 2 > (array-dimension (aref array-1 0 0) 0) 3 > (array-dimension (aref array-1 0 1) 0) 2 > (array-dimension (aref array-1 1 0) 0) 1 > (array-dimension (aref array-1 1 1) 0) 4
array-dimension関数は、配列とインデックスを引数として持つ。そして、配列内のインデックス指定された配列の要素数を教えてくれる。つまり、ベクタを引数とした場合、インデックスは絶対に0でないとエラーになる。また、
>(setq array-1 #2A(("AAA" "BB")("C" "DDDD" "EEEEEEE")))
というようなことをすると、要素数が異なるということでエラーになり、配列を生成できない。つまり、array-dimension関数に渡すインデックスパラメータは、指定された配列のいくつめの配列を指定しても同じということか。言葉にすると難しい。図にすれば楽勝なのだが・・・