CSVつづき
デリミタをカンマ以外にも指定できるようにしてみた。
splitw(XS, Delimiter)-> RRS = splitw(XS,,, Delimiter), RS = lists:map(fun lists:reverse/1, RRS), lists:reverse(RS). splitw([Delimiter |XS], Cur, All, Delimiter) -> splitw(XS, , [Cur|All], Delimiter); splitw([X|XS], Cur, All, Delimiter) -> splitw(XS, [X|Cur], All, Delimiter); splitw(,Cur,All, _Delimiter) -> [Cur|All].
(emacs@pokarim)19> csv:splitw("abc,def,123",$,). ["abc","def","123"]
splitw([Delimiter |XS], Cur, All, Delimiter) ->
のところのパターンマッチングの仕方がすこしおもしろい感じになった。
Pythonにはない感覚。というか、Haskellでもこれは通らないか?
念のため試してみる。
main = print $ f (2, 2) f (x, y) = 1
これはとおるけど、
main = print $ f (2, 2) f (x, x) = 1
これはコンパイル時に、
Conflicting definitions for `x' In the definition of `f'
といってエラーとなる。そりゃそうだな。
以前ここらへんを調べたけど、
2008-03-19 - Conceptual Contexture
もっと簡単な例があったと。