Perlのjoin関数

にあたるものがないっぽい.concatと高階関数を使えば実現できるかもしれないのだけれど,Lisp脳が出来ていないので無理.


ゆとりらしく,自分にあったものを書くことにした.

(defun join (delm lis)
  (do ((oldlis lis (cdr oldlis))
       (str (car lis) (concat str delm (cadr oldlis))))
      ((null (cadr oldlis)) str)))

適当に書いたのでめちゃくちゃ副作用が起こりそうな気がする.どきどきしながらテスト.使い方はPerlのjoin関数と同じ.

(join "," '("foo" "hoge" "bar"))
=> "foo,hoge,bar"

(join " " '("1" "2" "3"))
=> "1 2 3"

; 1文字の場合もうまくいく.というか変な結果を出さない
(join "," '("foo"))
"foo"

string限定なので,numberの場合気を遣って変換してあげるとか.自分用だし面倒くさいからいいや.


CSVの変換プログラムを書いていて,読み込みはできたけれど書き出しできねえええEEEEEという状態で2時間くらいはまってました.作業に戻ります.