flite-0.1: examples/Parts.hs
{
p n = length (partitions n) ;
partitions n = partitionsWith n (countDown n) ;
partitionsWith n ns = case (==) n 0 of {
True -> Cons Nil Nil ;
False -> concatMap (partitionsWith0 n ns) ns ;
} ;
and False x = False;
and True x = x;
lt n m = and ((/=) n m) ((<=) n m);
partitionsWith0 n ns i =
let { n0 = (-) n i ; m = min i n0 } in
map (Cons i) (partitionsWith n0 (dropWhile (lt m) ns)) ;
length Nil = 0 ;
length (Cons x xs) = (+) 1 (length xs) ;
countDown n = case (<=) 1 n of {
True -> Cons n (countDown ((-) n 1)) ;
False -> Nil ;
};
concatMap f Nil = Nil ;
concatMap f (Cons x xs) = append (f x) (concatMap f xs) ;
append Nil ys = ys ;
append (Cons x xs) ys = Cons x (append xs ys) ;
min m n = case (<=) m n of {
True -> m ;
False -> n ;
};
map f Nil = Nil ;
map f (Cons x xs) = Cons (f x) (map f xs) ;
dropWhile p xs = case xs of {
Nil -> Nil ;
Cons x xs0 -> case p x of {
True -> dropWhile p xs0 ;
False -> xs ;
};
} ;
main = emitInt (p 20) 0;
}