1*21d3294cSantirez-- fibonacci function with cache 2*21d3294cSantirez 3*21d3294cSantirez-- very inefficient fibonacci function 4*21d3294cSantirezfunction fib(n) 5*21d3294cSantirez N=N+1 6*21d3294cSantirez if n<2 then 7*21d3294cSantirez return n 8*21d3294cSantirez else 9*21d3294cSantirez return fib(n-1)+fib(n-2) 10*21d3294cSantirez end 11*21d3294cSantirezend 12*21d3294cSantirez 13*21d3294cSantirez-- a general-purpose value cache 14*21d3294cSantirezfunction cache(f) 15*21d3294cSantirez local c={} 16*21d3294cSantirez return function (x) 17*21d3294cSantirez local y=c[x] 18*21d3294cSantirez if not y then 19*21d3294cSantirez y=f(x) 20*21d3294cSantirez c[x]=y 21*21d3294cSantirez end 22*21d3294cSantirez return y 23*21d3294cSantirez end 24*21d3294cSantirezend 25*21d3294cSantirez 26*21d3294cSantirez-- run and time it 27*21d3294cSantirezfunction test(s,f) 28*21d3294cSantirez N=0 29*21d3294cSantirez local c=os.clock() 30*21d3294cSantirez local v=f(n) 31*21d3294cSantirez local t=os.clock()-c 32*21d3294cSantirez print(s,n,v,t,N) 33*21d3294cSantirezend 34*21d3294cSantirez 35*21d3294cSantirezn=arg[1] or 24 -- for other values, do lua fib.lua XX 36*21d3294cSantirezn=tonumber(n) 37*21d3294cSantirezprint("","n","value","time","evals") 38*21d3294cSantireztest("plain",fib) 39*21d3294cSantirezfib=cache(fib) 40*21d3294cSantireztest("cached",fib) 41