Beispielcode für Sort und Typo

This commit is contained in:
Jonas Betzendahl 2015-06-14 10:13:11 +02:00
parent cd7ed5db2b
commit d87db40eed
2 changed files with 32 additions and 0 deletions

View File

@ -0,0 +1,32 @@
module Main where
import Data.List
import Test.QuickCheck
-- Sorting twice changes nothing
prop_idempotency :: Ord a => [a] -> Bool
prop_idempotency xs = qsort xs == qsort (qsort xs)
-- Sorting doesn't change the length
prop_len :: Ord a => [a] -> Bool
prop_len xs = length xs == length (qsort xs)
-- Sorted result is a permutation of input
prop_perm :: Ord a => [a] -> Bool
prop_perm xs = (qsort xs) `elem` (permutations xs)
-- Sorting produces sorted list
prop_sort :: Ord a => [a] -> Bool
prop_sort = isSorted . qsort
where
isSorted :: Ord a => [a] -> Bool
isSorted [] = True
isSorted [x] = True
isSorted (x:y:zs) = (x <= y) && isSorted (y:zs)
qsort :: Ord a => [a] -> [a]
qsort [] = []
qsort (p:xs) = (qsort lesser) ++ p:(qsort greater)
where
lesser = filter (< p) xs
greater = filter (>= p) xs

Binary file not shown.