かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

とりあえず作ってみようの続き

とりあえず作ってみよう - かずきのBlog@Hatena
の続きってことで、とりあえず作ってみた。
これくらいのプログラムを組むのに結構かかってしまう。
まだまだ脳みそが関数型言語を使う領域に達していないんだなぁと実感。


そしてHaskell的に、いいプログラムなのか悪いプログラムなのかも不明だが、
とりあえず完成はこんな感じ。

Sort.hs

module Sort(recordSort) where

import Maybe
import List

recordSort :: [(Int, Int)] -> [Int] -> [Int]
recordSort record =  reverse . sortBy (comp record)

comp :: [(Int, Int)] -> Int -> Int -> Ordering
comp rec l r = compare (getSortKeyValue l) (getSortKeyValue r) where
    getSortKeyValue val = case (lookup val rec) of
                                     Just a -> a
                                     Nothing -> 0
Main.hs


module Main where

import Sort

record = [(7, 345),
    (8, 678),
    (1, 123),
    (2, 456),
    (5, 567),
    (6, 812),
    (3, 781),
    (4, 234)]

target = [4, 5, 3, 1, 2]

main = print $ recordSort target record