diff options
author | Yale AI Dept <ai@nebula.cs.yale.edu> | 1993-07-14 13:08:00 -0500 |
---|---|---|
committer | Duncan McGreggor <duncan.mcgreggor@rackspace.com> | 1993-07-14 13:08:00 -0500 |
commit | 4e987026148fe65c323afbc93cd560c07bf06b3f (patch) | |
tree | 26ae54177389edcbe453d25a00c38c2774e8b7d4 /progs/demo/merge.hs |
Import to github.
Diffstat (limited to 'progs/demo/merge.hs')
-rwxr-xr-x | progs/demo/merge.hs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/progs/demo/merge.hs b/progs/demo/merge.hs new file mode 100755 index 0000000..cf61f8f --- /dev/null +++ b/progs/demo/merge.hs @@ -0,0 +1,26 @@ +{- This is a simple merge sort -} + +module Merge where + +merge :: [Int] -> [Int] -> [Int] +merge [] x = x +merge x [] = x +merge l1@(a:b) l2@(c:d) | a < c = a:(merge b l2) + | otherwise = c:(merge l1 d) + +half [] = [] +half [x] = [x] +half (x:y:z) = x:r where r = half z + +sort [] = [] +sort [x] = [x] +sort l = merge (sort odds) (sort evens) where + odds = half l + evens = half (tail l) + +main = + appendChan stdout "Enter a list of integers separated by \",\"\n" abort $ + readChan stdin abort $ \ input -> + appendChan stdout + (show (sort (read ("[" ++ (head (lines input)) ++ "]")))) + abort done |