我正在使用core.logic
解决我的问题的一部分。我预计这种描述问题的声明性质会导致在大型输入上性能不佳。
但我的设置是核心逻辑的输入很少改变,但我频繁查询它们。所以自然地,我认为记忆化可以加速性能。
我只能记忆化顶级(l/run*
形式的输出,但这比在每一个l/defne
或每一个对conde
的调用中进行记忆化效率要低,因为后者可以提供与动态规划相同的效果。
但我并不理解什么样的值(例如,由新提出的LVar
引入的值)在逻辑子句之间传递。它们与普通Clojure值不同,我甚至没有直接调用过任何一个子句(如l/==
或l/member
)"正常"。它们总是被l/run*
间接调用。
所以,如果我想记忆化这样的defne
,我需要做任何事情吗?