Skip to content

qrmoon/scheme-memoization

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

scheme-memoization

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.

Usage

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))

Releases

No releases published

Packages

No packages published

Languages