所以我正在编写一些代码(正在复习 Racket 类(class)的练习考试),我必须执行以下操作:
编写一个函数 cached-assoc
接受一个列表 xs
和一个数字 n
并返回一个接受一个参数的函数 v
并返回与 (assoc v xs
) 相同的内容。
你应该使用最近结果的 n 元素缓存来使这个函数比仅仅调用 assoc 更快。缓存应该是一个长度为 n 的向量,它是通过调用 cached-assoc 创建的,并且在每次调用 cached-assoc 返回的函数时使用并可能发生变化。
缓存开始时为空(所有元素#f)。当调用 cached-assoc 返回的函数时,它首先检查缓存中的答案。如果不存在,它使用 assoc
和 xs
来获得答案,如果结果不是 #f
(即 xs 有一个匹配的对),它在返回之前将该对添加到缓存中
(使用矢量集!)。
缓存槽以循环方式使用:第一次将一对添加到缓存时,将其放入位置 0
,下一对放入位置 1,依此类推。到位置 n - 1
,然后回到位置 0
(替换已经存在的对),然后是位置 1
,等等。
我不知道该怎么做。
最佳答案
这个问题需要你做一些事情。这是部分列表:
- 如何构建具有内部非全局状态的函数。
- 如何定义可以在向量中搜索项目的函数。
- 如何构造一个函数来包装另一个函数。
- 知道 assoc 做什么。
- 如何改变向量。
- 如何改变局部变量。
作为一个测验题,它实际上是一次练习几个概念,如果你不把这些概念放在心上,你就会有困难。
您是否遇到过这些问题,或者是否有其他问题让您陷入困境?
关于functional-programming - 在 Racket 中编写缓存函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8089658/