Hatena::ブログ(Diary)

C++でゲームプログラミング

2012-09-14

[]Haskell で hlint を使用したコードチェック

Haskell のコードチェックを行う hlint というツールを試してみました。


[hlint のインストール]

$ cabal install happy
$ cabal install haskell-src-exts
$ cabal install hlint

cabal を使ってサクッとインストール


[テストコード]

-- main.hs

main = do
    print $ plus 1 2
    print $ plus3 4
    where
        plus = \a b -> a + b
        plus3 = \x -> plus 3 x

[出力]

$ hlint main.hs
D:\test\main.hs:28:17: Error: Redundant lambda
Found:
  plus = \ a b -> a + b
Why not:
  plus a b = a + b

D:\test\main.hs:28:24: Warning: Avoid lambda
Found:
  \ a b -> a + b
Why not:
  (+)

D:\test\main.hs:29:17: Error: Redundant lambda
Found:
  plus3 = \ x -> plus 3 x
Why not:
  plus3 x = plus 3 x

D:\test\main.hs:29:25: Warning: Avoid lambda
Found:
  \ x -> plus 3 x
Why not:
  plus 3

4 suggestions

こんな感じで問題になっている箇所を警告し、更に解決方法まで教えてくれます。

頭がいいですね。

面白そうなので watchdogs.vim にも定義を書いておこう。


[参照]

http://d.hatena.ne.jp/IwamotoTakashi/20100719/p1

2012-01-05

[]Haskell でエラトステネスの篩やってみた

唐突に Haskell が書きたくなったので 久々に Haskell 入門!


[ソース]

prime :: [Int] -> [Int]
prime [] = []
prime (x:xs)
    | (>) (x*x) $ maximum xs = [x] ++ xs
    | otherwise = (++) [x] $ prime $ filter (\ y -> (/=) 0 $ mod y x) xs

main = print $ prime [2..100]

[出力]

[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]

Haskell 力が1.6ぐらい上がった気がする!

まぁなんか塩っぱい感じもしますが。

あと5回ぐらい Haskell 入門すれば慣れてきそう。

2011-10-18

[]Haskell で FibBuzz 書いてみた

とりあえず自力で書いてみた。


[ソース]

fizzbuzz :: Int -> String
fizzbuzz n = case (n `mod` 3 == 0, n `mod` 5 == 0) of
    (True, True)  -> "FizzBuzz"
    (True, False) -> "Fizz"
    (False, True) -> "Buzz"
    (_, _)        -> show n

fibonacciImpl :: Int -> Int -> Int -> Int
fibonacciImpl n a b
    | n < 0     = a
    | otherwise = fibonacciImpl (n-1) b (a+b)

fibonacci :: Int -> Int
fibonacci n = fibonacciImpl n 0 1

main = print (map (fizzbuzz.fibonacci) [1..30])

[出力]

["1","2","Fizz","Buzz","8","13","Fizz","34","Buzz","89","Fizz","233","377","Buzz","Fizz","1597","2584","4181","FizzBuzz","10946","17711","28657","Fizz","Buzz","121393","196418","Fizz","514229","Buzz","1346269"]

[関連]

こっちはさっぱり読めないですね…。

Haskell むずい。