Guest User

Untitled

a guest
May 25th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.02 KB | None | 0 0
  1. (define-syntax define-memoize
  2. (syntax-rules ()
  3. ((_ (name arg ...) body ...)
  4. (define name
  5. (let ((cache (make-hash-table 'equal?)))
  6. (lambda (arg ...)
  7. (let ((val (hash-table-get cache `(,arg ...) #f)))
  8. (if val
  9. val
  10. (let ((val (begin body ...)))
  11. (hash-table-put! cache `(,arg ...) val)
  12. val)))))))))
  13.  
  14.  
  15. (define-memoize (fib n)
  16. (if (< n 2)
  17. 1
  18. (+ (fib (- n 1))
  19. (fib (- n 2)))))
  20.  
  21. ;(time (fib 100))
  22. ; real 0.000
  23. ; user 0.000
  24. ; sys 0.000
  25. 573147844013817084101
  26.  
  27.  
  28. (define-syntax define-memoize
  29. (syntax-rules ()
  30. ((_ (name arg ...) body ...)
  31. (define name
  32. (let ((cache (make-hash-table 'equal?)))
  33. (lambda (arg ...)
  34. (let ((al `(,arg ...)))
  35. (let ((val (hash-table-get cache al #f)))
  36. (if val
  37. val
  38. (let ((val (begin body ...)))
  39. (hash-table-put! cache al val)
  40. val))))))))))
Add Comment
Please, Sign In to add comment