我可以提取查询的第n个解决方案吗?我知道findall,但我认为(纠正我,如果我错了)它会创建一个完整的解决方案列表,而我更喜欢一种方法,它只需要消耗尽可能多的内存来计算值.
这里有一个简单的方法,您可以让 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.
Run Code Online (Sandbox Code Playgroud)
请注意使用剪切来强制决定论。随剪切findnsols/4可用于分页(即,以便计算接下来的 17 个解)。