Skip to content

Instantly share code, notes, and snippets.

@cametan001
Created May 13, 2010 15:39
Show Gist options
  • Save cametan001/399968 to your computer and use it in GitHub Desktop.
Save cametan001/399968 to your computer and use it in GitHub Desktop.
gosh> (define (memoize fn)
(let ((cache (make-hash-table 'equal?)))
(lambda args
(let ((val (hash-table-get cache args #f)))
(if val val
(hash-table-put! cache args (apply fn args)))))))
memoize
gosh> (define (fib n)
(if (< n 2)
1
(+ (fib (- n 1))(fib (- n 2)))))
fib
gosh> (time (fib 35))
;(time (fib 35))
; real 2.451
; user 2.450
; sys 0.000
14930352
gosh> (time ((memoize fib) 35))
;(time ((memoize fib) 35))
; real 2.580
; user 2.570
; sys 0.000
#<undef>
gosh> (time ((memoize fib) 35))
;(time ((memoize fib) 35))
; real 2.438
; user 2.430
; sys 0.000
#<undef>
gosh>
gosh> (define slowid (memoize fib))
slowid
gosh> (time (slowid 35))
;(time (slowid 35))
; real 2.549
; user 2.510
; sys 0.000
#<undef>
gosh> (time (slowid 35))
;(time (slowid 35))
; real 0.000
; user 0.000
; sys 0.000
14930352
gosh>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment