5
我在编写自动备忘录时遇到了一些问题。在Scheme中编写自动记忆器。帮助宏和封装
我有一个工作记忆功能,它创建一个哈希表并检查该值是否已经计算出来。如果之前已经计算过,则返回值,否则调用该函数。
(define (memoizer fun)
(let ((a-table (make-hash)))
(λ(n)
(define false-if-fail (λ() #f))
(let ((return-val (hash-ref a-table n false-if-fail)))
(if return-val
return-val
(begin
(hash-set! a-table n (fun n))
(hash-ref a-table n)))))))
现在我想创建一个memoize的,包装函数是这样的:
(define (memoize-wrapper function)
(set! function (memoizer function)))
并希望创建一个名为DEF备忘录,其与memoize的-包装定义函数宏。例如。宏可能会扩大到(memoizer(定义函数名参数的身体...)或类似的东西
所以,我应该能够做到:
(def-memo (factorial n)
(cond
((= n 1) 1)
(else (* n (factorial (- n 1))))))
应创建的memoized版本阶乘而不是正常的缓慢的。
我的问题是,
- 的memoize的封装器不能正常工作,它不叫memoized功能,但原有的功能。
- 我不知道如何编写宏内的定义。我如何确保我可以获得变量长度参数和可变长度的主体?那么我如何定义这个函数并用memoizer包装它呢?
非常感谢。
WOW。这真是太棒了。你能简单地评论你的代码,特别是宏位。为什么有。 ?你为什么提供?你真的需要申请吗?我是一个新手。谢谢。 – unj2 2009-07-01 00:01:00