在寻找记忆功能时找到了这个:
#lang scheme
(define (memo f)
(define mh (make-hash))
(lambda p
(hash-ref mh p (lambda ()
(hash-set! mh p (apply f p))
(hash-ref mh p)))))
(define-syntax-rule (defmemo (id . p) . body)
(define id (memo (lambda p . body))))
(provide defmemo)
如此处所示:Writing an auto-memoizer in Scheme. Help with macro and a wrapper
然而,在文档中还有:make-weak-hash和make-immutable-hash。哪个哈希函数更适合记忆?
答案 0 :(得分:1)
很棒的问题。
我想说的是,保留make-hash
是最好的选择。其他选项用于不同目的。
make-immutable-hash
用于制作,嗯,你猜对了,不可变的哈希表。它创建的哈希表与使用hash
创建的哈希表相同。当然,表中的项目仍然是可变的,例如,如果你在那里放置一个可变结构。它只是表本身不可变。
make-hash
用于制作可变哈希表。这可能是你想要的,因为你正在改变你的memoization表。
make-weak-hash
实际上完全不同。具体来说,它存储表中项目的“弱”指针。也就是说,就垃圾收集器而言,它不算作指针。因此,如果您使用它们,您的物品最终可能会被收集。 (这并不意味着你会得到一个段错误,你可能会丢失你的数据。)因此,除非你知道你特别想要这种行为,否则你通常不需要这个表。