我是SWI-Prolog的初学者(但在Borland Prolog方面有一些经验),我面对以下测试代码的奇怪行为:
test(10).
test(1).
查询?-test(A)
需要获得2个解决方案,例如A = 10; A = 1
。但是,仅生成A = 10
。我不在这里使用剪切。在SWI-Prolog中,默认情况下回溯是关闭的吗?
提前致谢
答案 0 :(得分:5)
对不起,答案很简单(见SWI-Prolog doc):
用户可以键入分号(;)或空格键,如果他想要其他解决方案。如果您不想查看更多答案,请使用返回键。如果用户使用返回键或Prolog知道没有更多答案,则Prolog以句点(。)完成输出。如果Prolog找不到(更多)答案,那就写错了。
答案 1 :(得分:1)
bagof/3可能正是您想要的。
?- bagof(X, test(X), Xs).
其中Xs
是所有匹配结果的列表。
知道匿名变量对bagof的期望不起作用。在以下示例中:
test(1,odd).
test(2,even).
test(3,odd).
test4(even).
bagof(X, test(X,_), Xs)
仅在第二项相同的情况下给出X的值;在这种情况下,只有偶数。如果要返回所有匹配的值,则需要执行类似的操作
?- bagof(X, A^test(X,A), Xs).