2013年12月17日火曜日

開発環境

初めてのコンピュータサイエンス(Jennifer CampbellPaul GriesJason MontojoGreg Wilson(著)長尾 高弘(翻訳))の12章(各種ツール)、12.7(練習問題)、12-13.をHaskellで解いてみる。

その他参考書籍

12.7(練習問題)、12-13.

コード(BBEdit)

Sample.hs

{-# OPTIONS -Wall -Werror #-}

import System.Random

main :: IO ()
main = do
    gen <- getStdGen
    let l = take 10 $ randomRs ((0 :: Int), (100 :: Int)) gen
    print l
    print $ findMinAndMax l

findMinAndMax :: (Ord a) => [a] -> Either String (a, a)
findMinAndMax [] = Left "empty list"
findMinAndMax ns = Right (findMin ns, findMax ns)

findMax :: (Ord a) => [a] -> a
findMax = foldr1 (\a acc -> if a > acc then a else acc)

findMin :: (Ord a) => [a] -> a
findMin = foldr1 (\a acc -> if a < acc then a else acc)

入出力結果(Terminal, runghc)

$ runghc Sample.hs
[9,8,20,60,81,8,0,99,24,70]
Right (0,99)
$ runghc Sample.hs
[45,82,96,31,69,52,30,81,16,32]
Right (16,96)
$ runghc Sample.hs
[65,87,12,79,72,63,82,19,65,75]
Right (12,87)
$ runghc Sample.hs
[73,35,30,74,33,44,89,66,20,66]
Right (20,89)
$ runghc Sample.hs
[61,40,71,0,51,22,87,56,16,49]
Right (0,87)
$

慣れるまでは{-# OPTIONS -Wall -Werror #-}の記述を消さずに細かく型を指定していくことに。

0 コメント:

コメントを投稿