2010-02-01から1ヶ月間の記事一覧

Yコンビネータ

フィボナッチと階乗やってみる。 > let y f = f $ y f > :i y y :: (b -> b) -> b -- Defined at <interactive>:1:4 > y (\f n -> if n < 2 then n else f (n-1) + f (n-2)) 7 13 > y (\f n -> if n < 2 then n else f (n-1) + f (n-2)) 100 Interrupted. ← (´・ω・`)ショホ</interactive>…

RWH 4章練習問題1

なんか作るのにすごい時間かかった・・・ リストを述語で分割 splitWith :: (a -> Bool) -> [a] -> [[a]] splitWith f [] = [] splitWith f xs = case span f xs of (a,b) -> a : (splitWith f $ snd $ span (not . f) b) > splitWith (/= 'a') "igaiahaidih…

リストとか

Scalaでやってたやつとか。 平方数 > take 10 $ zipWith (*) [1..] [1..] [1,4,9,16,25,36,49,64,81,100] > take 10 $ map (\x -> x * x) [1..] [1,4,9,16,25,36,49,64,81,100] 総和と総積 > foldl (+) 0 [1..10] 55 > foldl (*) 1 [1..10] 3628800 > foldl1…

中置関数

map とかって、中置で使うとOO系言語と逆になるんだよなぁ・・ > :info map map :: (a -> b) -> [a] -> [b] -- Defined in GHC.Base > (\x -> x + 1) `map` [1..10] [2,3,4,5,6,7,8,9,10,11] > succ `map` [1..10] [2,3,4,5,6,7,8,9,10,11] > let myMap a b …

Haskellやる!

Real World Haskell―実戦で学ぶ関数型言語プログラミング が研究室に入ったので、本格的に Haskell やってみようかと。 とりあえず、3章まで読んだ。 目指せリア充! (注:「Real World Haskell充」の略) 小ネタ: 3項演算子 > let (+++) a b c = a + b + c …

Y(Z)コンビネータ

無名関数が再帰できるとか。 scala> def Y[A,B](f:(A=>B)=>(A=>B))(x:A):B = f(Y(f))(x) Y: [A,B](((A) => B) => (A) => B)(A)B scala> Y((f:Int=>Int) => (n:Int) => n match { | case m if m < 2 => m | case _ => f(n-1) + f(n-2) | })(7) res1: Int = 13…

わんくま名古屋勉強会#11

わんくま名古屋勉強会 #11 参加してきました。 昼休みにあったTDD道場について話題になってる様子。 TDD道場の自分なりの補足 - Logic Dice FizzBuzz with TDD - Logic Dice TestCase 属性などによるテストコードのリファクタリング - 予定は未定Blog版 自分…