fib := method(n, if (n == 0, return 1) if (n == 1, return 1) return fib(n-1)+fib(n-2) ) memo := method(fn, mem := List clone return block(x, if (mem at(x), return mem at(x)) v := fn(x) mem atPut(x, v) return v ) ) fib = memo(getSlot("fib")) fib(100) print "\n" print