文字列の分割
Lisp で文字列を分割させたい。Java でいうところの split のようなもの。標準ではないようなのでちょろっと書いてみた。
(defun split-string (split-char target) (let ((splitted-string nil)) (do () () (let ((first-index (position split-char target))) (when (null first-index) (setf splitted-string (append splitted-string (cons target nil))) (return)) (setf splitted-string (append splitted-string (cons (subseq target 0 first-index) nil))) (setf target (subseq target (+ 1 first-index))))) splitted-string))
以下のように使用する。
(print (split-string #\Space "aaa dddd kkkkkk ss c lllllllll")) (print (split-string #\: "aaa dddd: kckg:: kkkkk")) (print (split-string #\Space "aaa dddd kkkkk ss c "))
この実行結果は以下のようになる。
$ ccl64 -l string.lisp ("aaa" "dddd" "kkkkkk" "ss" "c" "lllllllll") ("aaa dddd" " kckg" "" " kkkkk") ("aaa" "dddd" "kkkkk" "ss" "c" "")
文字列が分割されて、分割されたものはリストになるようにしてみた。