add sugar/cache module
parent
2d48f83503
commit
00f82f1f93
@ -0,0 +1,15 @@
|
|||||||
|
#lang racket/base
|
||||||
|
(require (for-syntax racket/base))
|
||||||
|
(provide (all-defined-out))
|
||||||
|
|
||||||
|
(define (make-caching-proc base-proc)
|
||||||
|
(let ([cache (make-hash)])
|
||||||
|
(λ args
|
||||||
|
(hash-ref! cache args (λ () (apply base-proc args))))))
|
||||||
|
|
||||||
|
(define-syntax (define/caching stx)
|
||||||
|
(syntax-case stx ()
|
||||||
|
[(_ (name arg ... . rest-arg) body ...)
|
||||||
|
#'(define/caching name (λ(arg ... . rest-arg) body ...))]
|
||||||
|
[(_ name body ...)
|
||||||
|
#'(define name (make-caching-proc body ...))]))
|
Loading…
Reference in New Issue