请分享您的想法,参与2024年Clojure状态调查!

欢迎!请参阅关于页面了解更多关于如何操作的信息。

0
core.logic
编辑

我正在使用core.logic解决我的问题的一部分。我预计这种描述问题的声明性质会导致在大型输入上性能不佳。

但我的设置是核心逻辑的输入很少改变,但我频繁查询它们。所以自然地,我认为记忆化可以加速性能。

我只能记忆化顶级(l/run*形式的输出,但这比在每一个l/defne或每一个对conde的调用中进行记忆化效率要低,因为后者可以提供与动态规划相同的效果。

但我并不理解什么样的值(例如,由新提出的LVar引入的值)在逻辑子句之间传递。它们与普通Clojure值不同,我甚至没有直接调用过任何一个子句(如l/==l/member)"正常"。它们总是被l/run*间接调用。

所以,如果我想记忆化这样的defne,我需要做任何事情吗?

1 答案

0

选中
 
最佳答案

我没有尝试过,但我想在 clojure.core.logic 中这被称为“tabling”。tabled 帮助了吗? 查看此处

by
啊,就这样解决了!关于这一点,在 byrd 的论文中有更详细的解释,如果不是因为你的评论,我绝对想不到要查看关于“tabling”的章节。谢谢!
...