-- !! a = [1,2,3] !! 1 -- Lazy evaluation fact1a :: Integer -> Integer -> Integer fact1a 0 f = f fact1a n f = fact1a (n-1) (n*f) fact1b :: Integer -> Integer -> Integer fact1b 0 f = f fact1b n f = fact1b (n-1) $! (n*f) -- Infinite lists zeros = 0:zeros powersOf2 x = x:powersOf2 (x*2) zeros1 = repeat 0 l1 = cycle [1,2,3] geomSeq = iterate (*2) 1 -- Fibbonacy fibSeq :: Integer -> Integer -> [Integer] fibSeq m n = m : (fibSeq n (m+n)) fib = fibSeq 1 1 -- Prime numbers noDivisors l x = all (\n -> x `mod` n /= 0) l isPrime x = noDivisors [2..x-1] x primes = filter isPrime [2..] -- Corecursion fibC = 1:1:zipWith (+) fibC (tail fibC) noDivisorsC l x = all (\n -> x `mod` n /= 0) (takeWhile (<= x `div` 2) l) primesC = 2:filter (noDivisorsC primesC) [3..] eratosthenes (x:xs) = x:eratosthenes (filter ((/= 0).(`mod` x)) xs) primesC2 = eratosthenes [2..]