假设这f(X)是一个可以被asserted和retracted编辑的动态事实,并且假设它X始终是数字。现在,假设执行最多的查询是关于查找f(X)最小的查询。在SWI-Prolog中,我可以这样写:
min_f(R) :- aggregate(min(X), f(X), R).
Run Code Online (Sandbox Code Playgroud)
但是,显然,这总是使Prolog对所有事实执行线性搜索。现在,假设将有大量这样的事实(例如1,000,000)。由于我事先知道我会经常执行min_f/1:
f/1,以便引擎可以在O(1)中找到最小值吗?assert包含所有事实的最小堆,然后窥视头部;事实可以隐式存储在最小堆中吗?我对Prolog方言没有任何限制,因此任何其他Prolog实现都可以。
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |