3 -- wholemeal programming
6 1. fun1 :: [Integer] -> Integer
9 | even x = (x - 2) * fun1 xs
12 2. fun2 :: Integer -> Integer fun2 1 = 0
13 fun2n | even n = n + fun2 (n ‘div‘ 2)
14 | otherwise = fun2 (3 * n + 1)
15 Hint: For this problem you may wish to use the functions
16 iterate and takeWhile. Look them up in the Prelude
17 documentation to see what they do.
20 fun1 :: [Integer] -> Integer
23 | even x = (x - 2) * fun1 xs
26 fun1' :: [Integer] -> Integer
27 fun1' = product . (map (\x -> x - 2)) . filter even
29 fun2 :: Integer -> Integer
31 fun2 n | even n = n + fun2 (n `div` 2)
32 | otherwise = fun2 (3 * n + 1)
34 fun2' :: Integer -> Integer
35 fun2' n = sum $ filter even $ takeWhile (/= 1) $ iterate gen n
36 where gen x | even x = x `div` 2
37 | otherwise = 3 * x + 1