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