Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Fib
- (
- simpleRecursionFibs,
- tailRecursionFibs,
- byZipWithFibs,
- simpleIterateFibs
- ) where
- {-
- fibs by usual recursion
- -}
- simpleRecursionFibs :: Int -> [Integer]
- simpleRecursionFibs n = map simpleRecursionFib [1 .. n]
- simpleRecursionFib :: Int -> Integer
- simpleRecursionFib 0 = 1
- simpleRecursionFib 1 = 1
- simpleRecursionFib n = simpleRecursionFib (n - 1) + simpleRecursionFib (n - 2)
- {-
- fibs by tail recursion
- -}
- tailRecursionFibs :: Int -> [Integer]
- tailRecursionFibs n = map tailRecursionFib [1 .. n]
- fibsTailTriple :: (Int, Integer, Integer) -> Int -> (Int, Integer, Integer)
- fibsTailTriple (curN, x, y) n =
- if curN < n
- then fibsTailTriple (curN + 1, y, x + y) n
- else (curN, x, y)
- third :: (x,y,z) -> z
- third (x,y,z) = z
- tailRecursionFib :: Int -> Integer
- tailRecursionFib n = third (fibsTailTriple (0,0,1) n)
- {-
- by zipWith
- -}
- byZipWithFibs :: Int -> [Integer]
- byZipWithFibs n = take n fibsByZipWith
- fibsByZipWith = 1 : 2 : zipWith (+) fibsByZipWith (tail fibsByZipWith)
- {-
- simple iterate fibs
- -}
- simpleIterateFibs :: Int -> [Integer]
- simpleIterateFibs n = take n simpleIterateFib
- simpleIterateFib = map fst (iterate f (1, 2)) where f (x, y) = (y, x + y)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement