我可以提取查询的第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.

注意使用cut来强制确定性。剪切后的findnsols/4可用于分页(即,以便计算接下来的17个解)。

关于prolog - 获取查询的第n个解决方案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28464594/

10-14 09:22