Search on the blog

2011年4月14日木曜日

Haskell勉強記(2)

今日もHaskell。

今日は、昨日の復習とlambda expressionについて。
まず、昨日の復習として、
  • map
  • filter
  • reduce
を自分で実装してみます。これを実現するためには、
  1. Pattern match
  2. tuple
を使えばいいです。
myReduce     f [] = 0
myReduce f (x:xs) = f x (myReduce f xs)

myMap f [] = []
myMap f (x:xs) = [f x] ++ (myMap f xs)

myFilter f [] = []
myFilter f (x:xs) = if f x
then [x] ++ (myFilter f xs)
else myFilter f xs
まぁこんな感じでしょう。

そして、上記自前関数の引数にlambda式を使ってみましょう。
Haskellでは、lambda expressionは"\"(バックスラッシュ)と"->"(ハイフンと大なり記号)を用いて表されます。
a = [1 .. 10]
main = do print $ myMap (\x -> x*x) a
print $ myFilter (\x -> x `mod` 2 /= 0) a
print $ myReduce (\x y -> x+y) a

なんか、意味不明な記号が多くて若干pe○lみたいで嫌ですが。。
今日はここまで。

0 件のコメント:

コメントを投稿