Haskell その2
うーむ、道のりは遠いなぁ。
じっくり行くとしましょうか。
周りが明るければ、遠くを見渡して近道を考えるけども、
こういう暗闇の中にいるときは足元だけ気にしとこう。
とりあえず、再度、他の人のcatを見てみる。
import System main = do args <- getArgs case args of [] -> putStr =<< getContents _ -> mapM_ (\a -> putStr =<< readFile a) args
まず分からないのは、
- caseって、caseだろうなぁ…、でも"_"ってなんだろ。後にとっておこう。
- getContents?なぜに標準入力が…。ああ、本当(?)のcatを真似したいのか。でも今はその機能いらない。
なので、引数のファイルだけを処理させるようにすれば、
import System cat fns = mapM_ (\a -> readFile a >>= putStr) fns main = getArgs >>= cat
さらに短くできる。
import System main = getArgs >>= mapM_ (\a -> readFile a >>= putStr)
でも、あのワンライナーとちょっと違う。
lambdaに名前を与えて、もう一回分解。
import System cat fn = readFile fn >>= putStr cats fns = mapM cat fns main = getArgs >>= cats
なるほど、やっと↓にたどり着いた気分。
import System main = getArgs >>= mapM readFile >>= mapM_ putStr
あ、もう用無しになったけど"_"は理解しとこう
http://www.sampou.org/haskell/tutorial-j/patterns.html
パターンマッチングのワイルドカード表現なのね。
さらに、"とくに値を気にしない照合"であり"ひとつの等式のなかに 1 つ以上あってもかまいません。"とな。
head (x:_) = x tail (_:xs) = xs
へぇ。