Macros for memoization implemented in R7RS Scheme. I made these to practice Scheme, but you might find them useful if your implementation doesn't an alternative.
Using define-memoized
(import (scheme base) (scheme write) (memo)) (define-memoized (fib n) (if (<= n 2) 1 (+ (fib (- n 2)) (fib (- n 1))))) (display (fib 50)) (newline)Or you can use memoized-lambda
(import (scheme base) (scheme write) (srfi 1) (memo)) (let ((divs (memoized-lambda (x) ;; find natural divisors of x (filter (lambda (n) (= 0 (modulo x n))) (iota x 1))))) (display (divs 24)) (newline) (display (divs 54)) (newline) (display (divs 24)) ;; won't be calculated again, ;; just fetched from cache (newline))