fork download
  1. ; just showing off
  2.  
  3. (define (fib n)
  4. (if (< n 2) 1
  5. (+ (fib (- n 1)) (fib (- n 2)))))
  6.  
  7. (display (fib 30)) (newline)
  8.  
  9. (define-syntax define-memoized
  10. (syntax-rules ()
  11. ((define-memoized (f arg ...) body ...)
  12. (define f
  13. (let ((cache (list)))
  14. (lambda (arg ...)
  15. (cond ((assoc `(,arg ...) cache) => cdr)
  16. (else (let ((val (begin body ...)))
  17. (set! cache (cons (cons `(,arg ...) val) cache))
  18. val)))))))))
  19.  
  20. (define-memoized (fib n)
  21. (if (< n 2) 1
  22. (+ (fib (- n 1)) (fib (- n 2)))))
  23.  
  24. (display (fib 30)) (newline)
Success #stdin #stdout 12.44s 45504KB
stdin
Standard input is empty
stdout
1346269
1346269