all tasks
This commit is contained in:
parent
b83f433714
commit
68f8f3e56b
14735 changed files with 178959 additions and 0 deletions
|
|
@ -0,0 +1,30 @@
|
|||
-- merge sort: sorting two lists by merging the sorted first
|
||||
-- and second half of the list
|
||||
|
||||
sort :: ([a] -> [a] -> [a] -> Success) -> [a] -> [a] -> Success
|
||||
|
||||
sort merge xs ys =
|
||||
if length xs < 2 then ys =:= xs
|
||||
else sort merge (firsthalf xs) us
|
||||
& sort merge (secondhalf xs) vs
|
||||
& merge us vs ys
|
||||
where us,vs free
|
||||
|
||||
|
||||
intMerge :: [Int] -> [Int] -> [Int] -> Success
|
||||
|
||||
intMerge [] ys zs = zs =:= ys
|
||||
intMerge (x:xs) [] zs = zs =:= x:xs
|
||||
intMerge (x:xs) (y:ys) zs =
|
||||
if (x > y) then intMerge (x:xs) ys us & zs =:= y:us
|
||||
else intMerge xs (y:ys) vs & zs =:= x:vs
|
||||
where us,vs free
|
||||
|
||||
firsthalf xs = take (length xs `div` 2) xs
|
||||
secondhalf xs = drop (length xs `div` 2) xs
|
||||
|
||||
|
||||
|
||||
goal1 xs = sort intMerge [3,1,2] xs
|
||||
goal2 xs = sort intMerge [3,1,2,5,4,8] xs
|
||||
goal3 xs = sort intMerge [3,1,2,5,4,8,6,7,2,9,1,4,3] xs
|
||||
Loading…
Add table
Add a link
Reference in a new issue