配列の配列をフラットな配列にする - lisp-cookbook-ja/common-lisp GitHub Wiki
配列の配列をフラットな配列にする
flatten はLISP系言語で良く使われるユーティリティ(ANSI CLには含まれていません)ですが、殆どがリストにしか対応していません。 ベクタ版のものが必要な場合は、下記のように書けるでしょう。
(defun vector-flatten (vec)
(cond ((not (vectorp vec)) vec)
((zerop (length vec)) #())
((vectorp (aref vec 0))
(concatenate 'vector
(vector-flatten (aref vec 0))
(vector-flatten (subseq vec 1))))
(T (concatenate 'vector
(vector (aref vec 0))
(vector-flatten (subseq vec 1))))))
(vector-flatten #(1 2 3 #(4 #(5) 6 '(7 8) 9)))
;=> #(1 2 3 4 5 6 '(7 8) 9)