SOE ex.9.8


{-
   I seems already ahead of this exercise;
   in fact, ex.9.7's n_twice is similar to this exercise.

   power f n v == f^n (v)
-}

power, power', power'' :: (a -> a) -> Int -> a -> a

power f n = foldr (.) id (replicate n f)

power' f 0     v  = v
power' f (n+1) v  = f (power f n v)

power'' f n v = iterate f v !! n


----- test -----
main = do
  putStrLn $ show $ power   (+2) 5 1
  putStrLn $ show $ power'  (+2) 5 1
  putStrLn $ show $ power'' (+2) 5 1

Leave a Reply