diff --git a/sample-programs/Quicksort.crf b/sample-programs/Quicksort.crf index e868ee6..c037aeb 100644 --- a/sample-programs/Quicksort.crf +++ b/sample-programs/Quicksort.crf @@ -1,3 +1,21 @@ +toStr : List Int -> List Char +toStr xs = case xs of + Cons a as => Cons (toChar a) (toStr as) + Nil => Nil + +toChar : Int -> Char +toChar x = case x of + 0 => '0' + 1 => '1' + 2 => '2' + 3 => '3' + 4 => '4' + 5 => '5' + 6 => '6' + 7 => '7' + 8 => '8' + 9 => '9' + filter p xs = case xs of Nil => Nil Cons x xs => case p x of @@ -8,16 +26,29 @@ filter p xs = case xs of Nil => bs Cons x xs => Cons x (xs ++ bs) -.<= a b = case a < b of - False => a == b - True => True +.:: a as = Cons a as +quicksort : List Int -> List Int quicksort xs = case xs of Nil => Nil - Cons a as => quicksort (filter (\y. a < y) xs) ++ (Cons a (quicksort (filter (\y. y <= a)) xs)) + Cons a as => let smaller = quicksort (filter (\y. y < a) xs) + in let bigger = quicksort (filter (\y. a < y) xs) + in smaller ++ (a :: bigger) -head xs = case xs of - Cons a _ => a +descList : Int -> Int -> List Int +descList from to = case to < from of + False => Cons to (descList from (to - 1)) + True => Nil -main : Int -main = head (quicksort (Cons 9 (Cons 8 (Cons 7 (Cons 6 (Cons 5 (Cons 4 (Cons 3 (Cons 2 (Cons 1 (Cons 0 Nil))))))))))) +main = let list = (5 :: (2 :: (8 :: (9 :: (6 :: (0 :: (1 :: Nil))))))) + in printStr (toStr (quicksort list)) + +{- + +-- Program output -- +0125689 +In dispose +Out dispose +ExitSuccess + +-}