配列をリストに変換する - lisp-cookbook-ja/common-lisp GitHub Wiki

配列

1次元の配列であるベクタをリストに変換するには、coerceを利用します。

(coerce #(1 2 3 4) 'list)
;=> (1 2 3 4)

多次元配列の場合は、ライブラリを利用するか自作することになるでしょう

(import 'mycl-util:group) ; On Lispのgroup
(import 'mycl-util:single); On Lispのsingle

;; (group-n-dim '(1 2 3 4) '(2 2)) ;=> '((1 2) (3 4))
(defun group-n-dim (list dim)
  (if (single dim)
      list
      (group-n-dim (group list (car (last dim)))
                   (butlast dim))))

(defun array->list (array)
  (let ((vec (make-array (array-total-size array)
                         :displaced-to array)))
    (group-n-dim (coerce vec 'list)
                 (array-dimensions array))))
;; 動作例
(array->list #2a((1 2) (3 4)))
;=> ((1 2) (3 4))

注記(編集する方へ)

多次元の配列→リストへの変換でANSI標準のもの(もしくは、良く知られたライブラリ)があったら記述を置き換えてください。

議論