配列要素をカンマ区切りで出力する - lisp-cookbook-ja/common-lisp GitHub Wiki

配列

配列要素をカンマ区切りで出力する

CLではこの様な場合、データをリストに格納することが多くライブラリもリストを扱うものが多いのでベクタの場合、ベクタをリストに型変換するか、ベクタ用に自作するかになります。

(let ((v (vector "はちべえ" "やしち" "かくさん" "すけさん")))
  (with-output-to-string (s)
    (loop :with last := (1- (length v))
	  :for i :from 0 :to last
	  :do (princ (aref v i) s)
	  :unless (= i last) :do (princ "," s))))
;=> "はちべえ,やしち,かくさん,すけさん"

型変換してformatに渡す

(let ((v (vector "はちべえ" "やしち" "かくさん" "すけさん")))
  (format nil "~{~A~^,~}" (coerce v 'list)))
;=> "はちべえ,やしち,かくさん,すけさん"

フォーマッタ関数を作成してformatへ渡す

(defun join-strings (s char v)
  (loop :with last := (1- (length v))
	:for i :from 0 :to last
	:do (princ (aref v i) s)
	:unless (= i last) :do (princ char s)))

(defun join/comma (s arg)
  (join-strings s #\, arg))

(format nil #'join/comma (vector "はちべえ" "やしち" "かくさん" "すけさん"))
;=> "はちべえ,やしち,かくさん,すけさん"