kikkiiのブログ

ひきこもり

linesとsplit-sequenceで文字列を分割

Haskellでは、文字列の中の \n は改行。こういうことをすぐ忘れてしまう。

Prelude> :t lines
lines :: String -> [String]

-- linesは、改行のところで文字列を分割してリストにする関数
Prelude> lines "aa\nbb\ncc\ndd\nee\nff"
["aa","bb","cc","dd","ee","ff"]

Common LispでもHaskelllinesみたいなのないかなと探していたらsplit-sequenceを使えばいいとわかった。split-sequenceを使えば文字列を分割できる。

(ql:quickload :split-sequence :silent t)
;;末端の改行を含めないlinesをつくってみる
(defun lines (str)
    (split-sequence:split-sequence #\Newline 
                   (string-right-trim '(#\Newline) str)))

あるいは、下のようにarrow-macrosを使って同じことをするなら、説明文を自然に追記できる。

(ql:quickload :split-sequence :silent t)
(ql:quickload :arrow-macros :silent t)

(defun lines (str)
  (arrow-macros:->> str
    ;;文字列の末端の改行を削除
    (string-right-trim '(#\Newline))
    ;;文字列を分割してlistにする
    (split-sequence:split-sequence #\Newline)))

●参考にしたページ