Safe Haskell | Safe |
---|
Solutions to Exercises for November 23, 2018
Exercise 2
Using the definitions
iterate f x = x : iterate f (f x) tail (_:xs) = xs take n xs | n <= 0 || null xs = [] take n (x:xs) = x : take (n-1) xs
The expression take 4 (iterate tail [1..3])
can be evaluated as follows:
take 4 (iterate tail [1..3]) = take 4 ([1..3] : iterate tail (tail [1..3])) = [1..3] : take 3 (iterate tail (tail [1..3])) = [1..3] : take 3 (tail [1..3] : iterate tail (tail (tail [1..3]))) = [1..3] : tail [1..3] : take 2 (iterate tail (tail (tail [1..3]))) = [1..3] : [2,3] : take 2 (iterate tail (tail [2,3])) = [1..3] : [2,3] : take 2 (tail [2,3] : iterate tail (tail (tail [2,3]))) = [1..3] : [2,3] : tail [2,3] : take 1 (iterate tail (tail (tail [2,3]))) = [1..3] : [2,3] : [3] : take 1 (iterate tail (tail [3])) = [1..3] : [2,3] : [3] : take 1 (tail [3] : iterate tail (tail (tail [3]))) = [1..3] : [2,3] : [3] : tail [3] : take 0 (iterate tail (tail (tail [3]))) = [1..3] : [2,3] : [3] : tail [3] : [] = [1..3] : [2,3] : [3] : [] : [] = [[1,2,3],[2,3],[3],[]]