-- fibonacci.hs: conjuring a fibonacci function
import Conjure
fibonacci :: Int -> Int
fibonacci 0 = 1
fibonacci 1 = 1
fibonacci 2 = 2
fibonacci 3 = 3
fibonacci 4 = 5
fibonacci 5 = 8
fibonacci 6 = 13
fibonacci 7 = 21
fib01 :: Int -> Int -> Int -> Int
fib01 0 1 0 = 1
fib01 0 1 1 = 1
fib01 0 1 2 = 2
fib01 0 1 3 = 3
fib01 0 1 4 = 5
fib01 0 1 5 = 8
fib01 0 1 6 = 13
fib01 0 1 7 = 21
as :: Args
as = args{maxSize=13}
main :: IO ()
main = do
conjureWithMaxSize 13 "fibonacci n" fibonacci
[ pr (1::Int)
, prim "+" ((+) :: Int -> Int -> Int)
, prim "dec" (subtract 1 :: Int -> Int)
, prim "<=" ((<=) :: Int -> Int -> Bool)
]
-- expected function:
-- fibonacci n = if n <= 1 then 1 else fibonacci (dec n) + fibonacci (dec (dec n))
-- 1 2 3 4 5 6 7 8 9 10 11 12 13
conjure "fib01" fib01
[ pr (0::Int)
, prim "+" ((+) :: Int -> Int -> Int)
, prim "dec" (subtract 1 :: Int -> Int)
, prim "<=" ((<=) :: Int -> Int -> Bool)
]
-- expected function:
-- fib01 x y z = if z <= 0 then y else fib01 y (x + y) (dec z)
-- 1 2 3 4 5 6 7 8 9 10 11 12