0

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

我的谓词如下所示:

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

我想知道是否有办法将结果保存在文件或其他东西中?

4

3 回答 3

3

使用 findall/3:

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

R 应绑定到所有 [X,Y,Z] 的列表,以便 question(X,Y,Z) 成功。

有关更多信息,请参阅:Findall 上的文档

于 2013-02-01T01:10:45.887 回答
1

你可以使用这样的东西:

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

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

于 2013-02-01T01:23:17.863 回答
0

SWI-Prolog 提供了一种方法来保存 REPL(读取、评估、打印、循环)控制台上进行的交互:请参阅内置协议。这种方式变量名称被保留。请注意,输出可能难以处理,长变量将被省略号替换(您可以更改此设置,请参阅这些答案)。

否则,forall /2 可能是一个可行的选择

?- open('a.txt',write,S), forall(member(X,[martin,carlo]), format(S,'~q~n',[X])), close(S).
于 2013-02-01T07:07:28.627 回答