かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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

とりあえず作ってみよう - かずきの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