code-conjure-0.6.6: eg/colin/ListFuns.txt
sum :: [Int] -> Int
-- testing 3 combinations of argument values
-- pruning with 4/8 rules
-- 1 candidates of size 1
-- 0 candidates of size 2
-- 0 candidates of size 3
-- 0 candidates of size 4
-- 1 candidates of size 5
-- tested 2 candidates
sum [] = 0
sum (x:xs) = x + sum xs
app :: [Int] -> [Int] -> [Int]
-- testing 3 combinations of argument values
-- pruning with 0/0 rules
-- 2 candidates of size 1
-- 0 candidates of size 2
-- 0 candidates of size 3
-- 6 candidates of size 4
-- 0 candidates of size 5
-- 10 candidates of size 6
-- tested 13 candidates
app xs [] = xs
app xs (x:ys) = x:app xs ys
mem :: Int -> [Int] -> Bool
-- testing 5 combinations of argument values
-- pruning with 29/42 rules
-- 1 candidates of size 1
-- 0 candidates of size 2
-- 0 candidates of size 3
-- 0 candidates of size 4
-- 0 candidates of size 5
-- 0 candidates of size 6
-- 0 candidates of size 7
-- 8 candidates of size 8
-- tested 8 candidates
mem x [] = False
mem x (y:xs) = mem x xs || x == y
sub :: [Int] -> [Int] -> Bool
-- testing 9 combinations of argument values
-- pruning with 9/18 rules
-- 2 candidates of size 1
-- 0 candidates of size 2
-- 0 candidates of size 3
-- 0 candidates of size 4
-- 4 candidates of size 5
-- 0 candidates of size 6
-- 16 candidates of size 7
-- 12 candidates of size 8
-- 68 candidates of size 9
-- 214 candidates of size 10
-- 184 candidates of size 11
-- 1400 candidates of size 12
-- 987 candidates of size 13
-- 5970 candidates of size 14
-- tested 8437 candidates
sub [] xs = True
sub (x:xs) [] = False
sub (x:xs) (y:ys) = if x == y
then sub xs ys
else sub (x:xs) ys
set :: [Int] -> Bool
-- testing 8 combinations of argument values
-- pruning with 15/19 rules
-- 0 candidates of size 1
-- 0 candidates of size 2
-- 0 candidates of size 3
-- 1 candidates of size 4
-- 0 candidates of size 5
-- 0 candidates of size 6
-- 1 candidates of size 7
-- 3 candidates of size 8
-- tested 4 candidates
set [] = True
set (x:xs) = set xs && not (elem x xs)
take :: Int -> [A] -> [A]
-- testing 143 combinations of argument values
-- pruning with 4/7 rules
-- 2 candidates of size 1
-- 1 candidates of size 2
-- 0 candidates of size 3
-- 0 candidates of size 4
-- 0 candidates of size 5
-- 3 candidates of size 6
-- 2 candidates of size 7
-- 6 candidates of size 8
-- 5 candidates of size 9
-- tested 15 candidates
take 0 xs = []
take x [] = []
take x (y:xs) = y:take (x - 1) xs
drop :: Int -> [A] -> [A]
-- testing 143 combinations of argument values
-- pruning with 4/7 rules
-- 2 candidates of size 1
-- 1 candidates of size 2
-- 0 candidates of size 3
-- 0 candidates of size 4
-- 2 candidates of size 5
-- 2 candidates of size 6
-- 3 candidates of size 7
-- tested 8 candidates
drop 0 xs = xs
drop x [] = []
drop x (y:xs) = drop (x - 1) xs
ord :: [Int] -> Bool
-- testing 6 combinations of argument values
-- pruning with 29/39 rules
-- 1 candidates of size 1
-- 1 candidates of size 2
-- 0 candidates of size 3
-- 0 candidates of size 4
-- 0 candidates of size 5
-- 2 candidates of size 6
-- 0 candidates of size 7
-- 4 candidates of size 8
-- 0 candidates of size 9
-- 0 candidates of size 10
-- 20 candidates of size 11
-- tested 12 candidates
ord [] = True
ord (x:xs) = ord xs && (null xs || x <= head xs)
merge :: [Int] -> [Int] -> [Int]
-- testing 360 combinations of argument values
-- pruning with 4/4 rules
-- 3 candidates of size 1
-- 0 candidates of size 2
-- 0 candidates of size 3
-- 10 candidates of size 4
-- 0 candidates of size 5
-- 16 candidates of size 6
-- 13 candidates of size 7
-- 22 candidates of size 8
-- 114 candidates of size 9
-- 36 candidates of size 10
-- 472 candidates of size 11
-- 604 candidates of size 12
-- 1442 candidates of size 13
-- 5188 candidates of size 14
-- 5474 candidates of size 15
-- tested 13394 candidates
cannot conjure
zip :: [A] -> [B] -> [(A,B)]
-- testing 360 combinations of argument values
-- pruning with 0/0 rules
-- 1 candidates of size 1
-- 0 candidates of size 2
-- 0 candidates of size 3
-- 0 candidates of size 4
-- 0 candidates of size 5
-- 0 candidates of size 6
-- 0 candidates of size 7
-- 0 candidates of size 8
-- 1 candidates of size 9
-- tested 2 candidates
zip [] xs = []
zip (x:xs) [] = []
zip (x:xs) (y:ys) = (,) x y:zip xs ys
assocs :: Int -> [(Int,A)] -> [A]
-- testing 67 combinations of argument values
-- pruning with 4/5 rules
-- 1 candidates of size 1
-- 0 candidates of size 2
-- 0 candidates of size 3
-- 0 candidates of size 4
-- 0 candidates of size 5
-- 0 candidates of size 6
-- 1 candidates of size 7
-- 1 candidates of size 8
-- 0 candidates of size 9
-- 3 candidates of size 10
-- 3 candidates of size 11
-- 0 candidates of size 12
-- 9 candidates of size 13
-- 7 candidates of size 14
-- 2 candidates of size 15
-- tested 26 candidates
assocs x [] = []
assocs x (xy:xys) = if x == fst xy
then snd xy:assocs x xys
else assocs x xys