【发布时间】:2011-12-26 17:47:44
【问题描述】:
所以我正在编写一些代码(通过 Racket 课程的练习考试),我必须执行以下操作:
编写一个函数cached-assoc,它接受一个列表xs 和一个数字n,并返回一个函数,该函数接受一个参数v,并返回与(assoc v xs) 将返回的相同的东西。
您应该使用最近结果的 n 元素缓存,以可能使此函数比仅调用 assoc 更快。缓存应该是一个长度为 n 的向量,它是通过调用 cached-assoc 来创建的,并且每次调用 cached-assoc 返回的函数时都会使用和可能发生突变。
缓存开始为空(所有元素#f)。当调用 cached-assoc 返回的函数时,它首先检查缓存中的答案。如果不存在,则使用assoc 和xs 获取答案,如果结果不是#f(即xs 有匹配的对),则在返回之前将其添加到缓存中
(使用向量集!)。
缓存槽以循环方式使用:第一次将一对添加到缓存中时,将其放在位置0,下一对放在位置1,依此类推,直到位置@987654330 @ 然后回到位置0(替换已经存在的对),然后位置1,等等。
我不知道该怎么做。
【问题讨论】:
-
你有什么特别不知道的?或者,也许,你有什么想法怎么做?当然,你必须知道一些东西,否则你会遇到更大的问题。
标签: functional-programming lisp scheme racket memoization