Page List

Search on the blog

2011年4月13日水曜日

Haskell勉強記(2)

今日もHaskell。

今日は、昨日の復習とlambda expressionについて。
まず、昨日の復習として、
  • map
  • filter
  • reduce
を自分で実装してみます。これを実現するためには、
  1. Pattern match
  2. tuple
を使えばいいです。
  1. myReduce     f [] = 0  
  2. myReduce f (x:xs) = f x (myReduce f xs)  
  3.   
  4. myMap f []     = []  
  5. myMap f (x:xs) = [f x] ++ (myMap f xs)  
  6.   
  7. myFilter f []    = []  
  8. myFilter f (x:xs) = if f x  
  9.                    then [x] ++ (myFilter f xs)  
  10.                    else myFilter f xs  
まぁこんな感じでしょう。

そして、上記自前関数の引数にlambda式を使ってみましょう。
Haskellでは、lambda expressionは"\"(バックスラッシュ)と"->"(ハイフンと大なり記号)を用いて表されます。
  1. a = [1 .. 10]  
  2. main = do print $ myMap (\x -> x*x) a  
  3.          print $ myFilter (\x -> x `mod` 2 /= 0) a  
  4.          print $ myReduce (\x y -> x+y) a  
なんか、意味不明な記号が多くて若干pe○lみたいで嫌ですが。。
今日はここまで。

0 件のコメント:

コメントを投稿