如何在SWI-Prolog中保存所有可能的解决方案?

时间:2013-02-01 01:02:19

标签: prolog

我有这个谓词有大约一千种可能性,我需要所有可能性作为输出。在Windows上的SWI-Prolog中简单地复制和粘贴所有列出的可能性是不可能的,因为你只能向上滚动。

我的谓词看起来像这样:

?- question(X,Y,Z).
X = 'Fo',
Y = 'Ob',
Z = 'Ar' ;
X = 'Fo2',
etc...

我想知道是否有办法将结果保存在文件中?

3 个答案:

答案 0 :(得分:2)

使用findall / 3:

findall([X,Y,Z],question(X,Y,Z),R).

R应绑定到所有[X,Y,Z]的列表,使问题(X,Y,Z)成功。

有关详细信息,请参阅:Documentatin on Findall

答案 1 :(得分:1)

您可以使用以下内容:

main :-
    tell('output.txt'),
    (
        question(X,Y,Z),
        writeln([X, Y, Z]),
        fail
    ;
        told
    ).

或者您可以在Prolog中运行查询( question(X,Y,Z), writeln([X, Y, Z]), fail ; true ).并以标准输出(屏幕)获取所有解决方案。

答案 2 :(得分:0)

SWI-Prolog提供了一种保存REPL(读取,评估,打印,循环)控制台上的交互的方法:请参阅protocol内置函数。这样就可以保留变量名称。请注意,输出可能难以处理,长变量将被省略号替换(您可以更改此内容,请参阅these answers)。

否则,forall / 2可能是一个可行的替代方案

?- open('a.txt',write,S), forall(member(X,[martin,carlo]), format(S,'~q~n',[X])), close(S).