2013年11月20日水曜日

開発環境

初めてのコンピュータサイエンス(Jennifer CampbellPaul GriesJason MontojoGreg Wilson(著)長尾 高弘(翻訳))の9章(集合と辞書)、9.5(練習問題)、1.をHaskellで解いてみる。

その他参考書籍

9.5(練習問題)、1.

コード(BBEdit)

Sample.hs

{-# OPTIONS -Wall -Werror #-}
import System.Random

main :: IO ()
main = do
    mapM_ putStrLn $ map (\x -> show x ++ ": " ++ (show $ findDups x)) $
                         map (\gen -> take 10 $ randomRs (1, 5) gen) $
                             map mkStdGen [1..5]

findDups :: [Int] -> [Int]
findDups =  snd . foldr (\x (a, b) -> if x `elem` a then
                                          if x `elem` b then
                                              (a, b)
                                          else
                                              (a, x:b)
                                      else
                                          (x:a, b)) ([], [])

入出力結果(Terminal, runghc)

$ runghc Sample.hs
[3,4,3,5,1,5,2,3,3,1]: [5,1,3]
[2,2,3,4,3,5,5,2,4,1]: [2,3,4,5]
[1,1,5,3,4,5,3,3,3,1]: [1,5,3]
[5,1,2,4,2,5,1,2,2,2]: [5,1,2]
[4,4,2,3,4,5,4,1,1,2]: [2,4,1]
$

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

0 コメント:

コメントを投稿