{- Fibonacci functions in Elm CSci 450/503, Fall 2016 H. Conrad Cunningham 2016-11-16 -} import Html exposing (..) -- Inefficient double backward recursive version fib : Int -> Int fib n = if n <= 0 then 0 else if n == 1 then 1 else -- double, backward recursion fib (n-1) + fib (n-2) -- Tail recursive version fib2 : Int -> Int fib2 n = let fibIter : Int -> Int -> Int -> Int fibIter n p q = if n <= 0 then p else -- tail recursion fibIter (n-1) q (p+q) in fibIter n 0 1 -- Simple Display Functions newline = br [] [] displayLines : List String -> List (Html msg) displayLines ss = case ss of [] -> [] x :: xs -> text x :: newline :: displayLines xs display : List String -> Html msg display ls = p [] (displayLines ls) -- Some testing main = display [ "fib 5 = " ++ toString (fib 5) , "fib 13 = " ++ toString (fib 13) , "fib2 5 = " ++ toString (fib2 5) , "fib2 13 = " ++ toString (fib2 13) , "Done!" ]