如何将从prolog程序中获得的所有解决方案写入文件?
答案 0 :(得分:4)
简短的回答是将调用嵌套在重复/失败循环中的“解决方案”谓词中,在倒数第二步将解决方案写入文件。
由于帖子缺乏涉及何种解决方案的详细信息(因此术语的编写可能有多困难,例如,如果希望能够重新复制一个或多个术语,而不是阅读写入的文件(点)),让我们从一个简单的例子开始,其中解决方案只是整数。
我们有以下非确定性谓词:
mySolution(X) :- for(X,1,10).
注意 for / 3 是GNU Prolog的内置谓词。 SWI-Prolog有类似的谓词介于/ 3 和Amzi! Prolog的 for / 4 有一个额外的参数,允许增量不是+1。用户实现将是:
for(Low,Low,High) :- Low =< High.
for(New,Low,High) :-
Now is Low + 1,
Now =< High,
for(New,Now,High).
这样,目标mySolution(X)
将以可预测的有限数量的方式成功。
文件输出可以通过使用GNU-Prolog的流系统,也可以通过控制台输出的命令行重定向来实现。我们将说明第一种可能性,尽管第二种可能性在许多情况下可能更简单,更灵活。
main :-
open('myOutput.txt',write,ID),
( ( mySolution(X), write(ID,X), nl(ID), fail )
; close(ID)
).
与许多Prolog实现一样,GNU-Prolog在 write 谓词上提供了几种流和非流变体,您可以找到here the relevant documentation。对于打开和关闭,请查看this link和that link。
已添加:我进行了 nl / 1 调用,以分离输出文件中的解决方案。