module AufgabeFFP1 where -- calculates 2^ with each element of the continuous list pof2s :: [Integer] pof2s = map (2^) [0,1..] -- alternate: -- pof2s :: [Integer] -- pof2s = iterate (2*) 1 ------------------------------------------------------------------------------- -- iterate steps: -- (1) [1] -- (2) zipWith (+) ([0,1]) ([1,0]) = [1,1] -- (3) zipWith (+) ([0,1,1]) ([1,1,0]) = [1,2,1] -- (4) zipWith (+) ([0,1,2,1]) ([1,2,1,0]) = [1,3,3,1] -- ... pd :: [[Integer]] pd = iterate (\row -> zipWith (+) ([0] ++ row) (row ++ [0])) [1] ------------------------------------------------------------------------------- -- steps: -- (1) [pd !! (1-1) !! 0] -- (2) [pd !! (2-1) !! 0] -- (3) [pd !! (3-1) !! 0] ++ [pd !! (3-2) !! 1] -- (4) [pd !! (4-1) !! 0] ++ [pd !! (4-2) !! 1] -- (5) [pd !! (5-1) !! 0] ++ [pd !! (5-2) !! 1] ++ [pd !! (5-3) !! 2] -- (6) [pd !! (6-1) !! 0] ++ [pd !! (6-2) !! 1] ++ [pd !! (6-3) !! 2] -- (7) [pd !! (7-1) !! 0] ++ [pd !! (7-2) !! 1] ++ [pd !! (7-3) !! 2] ++ [pd !! (7-4) !! 3] -- ... -- (n) [pd !! (n-1) !! 0] ++ [pd !! (n-2) !! 1] ++ [pd !! (n-3) !! 2] ++ ... fibdiag :: Integer -> [Integer] fibdiag (n) | n <= 0 = [] | otherwise = map (\x -> pd !! (fromInteger n - x) !! (x - 1)) [1..count] where count = (fromInteger n + 1) `div` 2 ------------------------------------------------------------------------------- fibdiags :: [[Integer]] fibdiags = map (fibdiag) [1,2..]