Shammer's Philosophy

My private adversaria

Lispのlength関数

リストの長さ(要素数)を調べる関数に、lengthというのがある。この関数を処理系に打ち込んでみると、

LENGTH : (SEQ)

と表示される。どうやら、SEQUENCEというデータ型があり、それの長さを調べることができる、というものだ。当然、リストはSEQUENCEの一部ということになる。あとは、ベクタ(1次元配列)がSEQUENCEに含まれる。

?(setf lst (list 'a 'a 'a))
(A A A)
?(length lst)
3
?(setf vec (make-array 3))
#(0 0 0)
?(length vec)
3
?(setf array (make-array '(2 2)))
#2A((0 0) (0 0))
?(length array)
> Error: value #<ARRAY 2x2, simple> is not of the expected type SEQUENCE.