-------------------- -- Exercise 1 -------------------- prim c g 0 x = c x prim c g n x = g (f (n - 1) x) (n - 1) x where f = prim c g m2 :: Integer -> () -> Integer m2 n x = prim (\_ -> 0) (\a -> \n -> \x -> a + 2) n x -- >>> print (m2 8 ()) -- 16 -- e2 :: Integer -> () -> Integer e2 n x = prim (\_ -> 1) (\a -> \n -> \x -> a * 2) n x -- >>> print (e2 4 ()) -- 16 -- exp :: Integer -> Integer -> Integer exp x n = prim (\_ -> 1) (\a -> \n -> \x -> a * x) n x -- >>> print (Main.exp 2 3) -- 8 -- fact :: Integer -> () -> Integer fact n x = prim (\_ -> 1) (\a -> \n -> \x -> a * (n + 1)) n x -- >>> print (fact 3 ()) -- 6 -- -------------------- -- Exercise 2 -------------------- f g x | x == 0 = g x | otherwise = g $ f g (x - 1) -- Nicht endrekursiv length xs = case xs of [] -> 0 x : xs -> (+1) $ Main.length xs -- ist endrekursiv length' ls = aux $ map ( const 1) $ ls where aux ys = case ys of [] -> 0 [x] -> x x : xs -> aux $ map (\y -> (+1) x ) xs -- length' und aux sind nicht endrekursiv