(define (memoize message f)
(define (dispatch message)
(cond
((eq? message 'm) k)
((eq? message 'um) 20)))
(define (k)
(let ((table (make-table)))
(lambda (x)
(let ((previously-computed-result (lookup x table)))
(or previously-computed-result
(let ((result (f x)))
(insert! x result table)
result)
)))))
f)
(set! fib(memoize 'm fib))
我的想法是,我將 m 作為消息發送,然後 ((eq? message 'm) k) 將檢查為真,因此定義 k 將運行並更改 fib 因為設置!,但代碼不起作用,因為我希望它能起作用,有人可以幫我嗎
您需要調用dispatch
並返回結果。您只是返回與您調用的函數相同的函數。
並且dispatch
您需要調用k
,而不僅僅是返回它,因為它返回具有查找表的閉包。
(define (memoize message f)
(define (dispatch message)
(cond
((eq? message 'm) (k))
((eq? message 'um) 20)))
(define (k)
(let ((table (make-table)))
(lambda (x)
(let ((previously-computed-result (lookup x table)))
(or previously-computed-result
(let ((result (f x)))
(insert! x result table)
result)
)))))
(dispatch message))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句