はぢめてのHaskell(6) - らんだむな記憶をもう少しだけマシにしたい。
Recursion - Learn You a Haskell for Great Good!くらいまで眺めたのでその知識で。
[prime3.hs]
prime :: Int -> Bool prime n | n <= 1 = False | otherwise = prime_with_i n 2 where prime_with_i n i | i >= n = True | n `mod` i == 0 = False | otherwise = prime_with_i n (i+1)
などと書いてみて、
Prelude> :l prime3 [1 of 1] Compiling Main ( prime3.hs, interpreted ) Ok, modules loaded: Main. *Main> [n | n <- [1..100], prime(n)] [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]
という感じで。なんかすこぶる汚いように感じるんだがなぁ...。
where bindingの代わりにlet bindingでも書いてみる。うーん( ゜- ゜)
[prime4.hs]
prime :: Int -> Bool prime n | n <= 1 = False | otherwise = let prime_with_i n i | i >= n = True | n `mod` i == 0 = False | otherwise = prime_with_i n (i+1) in prime_with_i n 2