2013年12月5日木曜日

開発環境

初めてのコンピュータサイエンス(Jennifer CampbellPaul GriesJason MontojoGreg Wilson(著)長尾 高弘(翻訳))の11章(探索とソート)、11.7(練習問題)、11-2-a.をHaskellで解いてみる。

その他参考書籍

11.7(練習問題)、11-2-a.

コード(BBEdit)

Sample.hs

{-# OPTIONS -Wall -Werror #-}

main :: IO ()
main = print $ selectionSort l

selectionSort :: (Ord a) => [a] -> [a]
selectionSort [] = []
selectionSort ns =
    let (m, ms) = findMin ns
    in m:selectionSort ms

findMin :: (Ord a) => [a] -> (a, [a])
findMin (n:ns) = iter n ns []
findMin _ = error "エラー: findMin"

iter :: (Ord a) => a -> [a] -> [a] -> (a, [a])
iter x [] ns = (x, ns)
iter x (n:ns) ms = if n < x then iter n ns (x:ms) else iter x ns (n:ms)

l :: [Int]
l = [6, 5, 4, 3, 7, 1, 2]

入出力結果(Terminal, runghc)

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

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

0 コメント:

コメントを投稿