2013年11月14日木曜日

開発環境

初めてのコンピュータサイエンス(Jennifer CampbellPaul GriesJason MontojoGreg Wilson(著)長尾 高弘(翻訳))の7章(反復)、7.7(練習問題)、3、4、5、6.をHaskellで解いてみる。

その他参考書籍

7.7(練習問題)、3、4、5、6.

コード(BBEdit)

Sample.hs

{-# OPTIONS -Wall -Werror #-}

main :: IO ()
main = do
    putStrLn "3."
    mapM_ print ([33..49] :: [Int])
    putStrLn "4."
    mapM_ putStr $ map (\x -> show x ++ " ") ([10, 9..1] :: [Int])
    putChar '\n'
    mapM_ putStr $ map (\x -> show x ++ " ") $ reverse ([1..10] :: [Int])
    putStrLn "\n5."
    mapM_ print $ map (\x -> x ([2..22] :: [Int]))
                      [average1, average2]
    putStrLn "6."
    mapM_ print $ map (\f -> f [1, 2, 3, -3, 6, -1, -3, 1])
                      [removeNeg1, removeNeg2]
mySum :: [Int] -> Int
mySum = foldr (+) 0

average1 :: [Int] -> Double
average1 [] = 0.0
average1 ns = (fromIntegral . mySum $ ns) / (fromIntegral . length $ ns)

average2 :: [Int] -> Double
average2 [] = 0.0
average2 ns = (fromIntegral . sum $ ns) / (fromIntegral . length $ ns)

removeNeg1 :: [Int] -> [Int]
removeNeg1 = foldr (\x acc -> if x < 0 then
                                 acc
                             else
                                 x:acc) []

removeNeg2 :: [Int] -> [Int]
removeNeg2 = filter (\x -> x >= 0)

入出力結果(Terminal, runghc)

$ runghc Sample.hs
3.
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
4.
10 9 8 7 6 5 4 3 2 1 
10 9 8 7 6 5 4 3 2 1 
5.
12.0
12.0
6.
[1,2,3,6,1]
[1,2,3,6,1]
$

{-# OPTIONS -Wall -Werror #-}を記述してるから、細かく型を指定(:: Double)しないと警告がいっぱい出た。慣れるまでは{-# OPTIONS -Wall -Werror #-}の記述を消さずに細かく型を指定していくことに。

0 コメント:

コメントを投稿