fib' := a -> n -> target -> if true then loop if n = target then break end [a1,a2] := a a <- [a2, a1+a2] n <- n+1 end get(a,1) end; fib := fib'([0,1])(1); fib_rec(n) := if n < 2 then n else fib_rec(n-1) + fib_rec(n-2); end; concat'(acc,set) := if length(set) = 0 then acc else [h,t] := head(set); concat'(acc+h, t) end concat := x -> concat'(0,x) g := i -> set -> get(set,i) test := f -> it -> v -> concat( map( g(1), map( x -> benchmark( [] -> f(x) ), map( _ -> v, [0..it] ) ) ) )/it print("Benchmarking fibonacci..."); print("-------------------------"); print("Non-recursive implementation"); print(test(fib)(30)(30)); print("Recursive implementation"); print(test(fib_rec)(30)(30));