获得查询的第n个解决方案

时间:2015-02-11 21:13:04

标签: prolog

我可以提取查询的第n个解决方案吗?我知道findall,但我认为(纠正我,如果我错了)它创建了一个完整的解决方案列表,我更喜欢一种方法,它只需要消耗尽可能多的内存来计算值。

1 个答案:

答案 0 :(得分:1)

这是一种简单的方法,您可以让SWI-Prolog精确计算 N 解决方案(您可以自己提供 N 的数字)。

在此示例中, N 为17,我们感兴趣的第17个解决方案的目标是between(0, inf, I)

?- findnsols(17, I, between(0, inf, I), L), last(L, X), !.
L = [0, 1, 2, 3, 4, 5, 6, 7, 8|...],
X = 16.

注意使用切割以强制确定性。切割findnsols/4可以用于分页(即,为了计算接下来的17个解决方案)。