Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (define-syntax define-memoize
- (syntax-rules ()
- ((_ (name arg ...) body ...)
- (define name
- (let ((cache (make-hash-table 'equal?)))
- (lambda (arg ...)
- (let ((val (hash-table-get cache `(,arg ...) #f)))
- (if val
- val
- (let ((val (begin body ...)))
- (hash-table-put! cache `(,arg ...) val)
- val)))))))))
- (define-memoize (fib n)
- (if (< n 2)
- 1
- (+ (fib (- n 1))
- (fib (- n 2)))))
- ;(time (fib 100))
- ; real 0.000
- ; user 0.000
- ; sys 0.000
- 573147844013817084101
- (define-syntax define-memoize
- (syntax-rules ()
- ((_ (name arg ...) body ...)
- (define name
- (let ((cache (make-hash-table 'equal?)))
- (lambda (arg ...)
- (let ((al `(,arg ...)))
- (let ((val (hash-table-get cache al #f)))
- (if val
- val
- (let ((val (begin body ...)))
- (hash-table-put! cache al val)
- val))))))))))
Add Comment
Please, Sign In to add comment