Shammer's Philosophy

My private adversaria

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関数に渡すインデックスパラメータは、指定された配列のいくつめの配列を指定しても同じということか。言葉にすると難しい。図にすれば楽勝なのだが・・・