はじめてのHaskell(4)

expand.hs ver2

パターンマッチ

関数の引数に文字リテラルや整数リテラルを指定することで、その値にマッチするときだけ、
関数を実行することができる。
例:
Func 't' = xxxx
Func 'c' = yyyy
Func a = zzzz
't'にマッチしたとき、xxxxを行う。
'c'にマッチしたとき、yyyyを行う。
a(変数:どんな値でも良い)にマッチしたとき、zzzzを行う。

関数

関数 概要
concatMap (a -> [b]) -> [a] -> [b],concat(リストの結合)+map(各要素へ関数を適用)
replicate Int -> a -> [a],aをInt個だけ含むリスト[a]を返す

replicate関数の例
replicate 5 1 = [1, 1, 1, 1, 1]
replicate 3 't' = "ttt"
replicate 0 True = []

tabStop = 8

main = do cs <- getContents
	  putStr $ expand cs

expand :: String -> String
expand cs = concatMap expandTab cs

expandTab :: Char -> String
expandTab '\t' = replicate tabStop ' '
expandTab c = [c]