2024 Clojure 状态调查! 中分享你的看法。

欢迎!请查看 关于 页面以获取更多关于如何使用本指南的信息。

0
core.logic
编辑

我正在使用 core.logic 解决我的问题的一部分。我预计描述问题的声明性会导致在大输入时性能较差。

但是,我所拥有的设置是 core.logic 的输入很少变化,但是查询它们的频率很高。因此,自然地我想到记忆化可以加速性能。

我只能对 top-level 的 (l/run* 表达式进行记忆化,但这比在每个 l/defne 或每次调用 conde 时进行记忆化要低效,因为后者可以提供与动态规划相同的加速效果。

但我不明白什么样的值(例如由 fresh 引入的 LVar)在逻辑子句之间传递。它们与常规 Clojure 值不同,我甚至从未“正常”调用过其中一个子句(如 l/==l/membero)。它们总是通过 l/run* 间接调用。

所以,如果我想对这样的 defne 进行记忆化,我需要做些特别的事情吗?

1 个回答

0
by
已选择 by
 
最佳回答

未尝试过,但我想在clojure.core.logic中这可能叫做"tabling"。tabled有帮助吗? https://clojure.github.io/core.logic/#clojure.core.logic/tabled

by
啊,解决了!更详细的解释可以在byrd的硕士论文中找到,如果不是你的评论,我可能永远不会想到查看“tabling”章节。谢谢!
...