写入gprolog中的文件

时间:2011-04-26 09:48:56

标签: prolog gnu-prolog

如何将从prolog程序中获得的所有解决方案写入文件?

1 个答案:

答案 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 linkthat link

已添加:我进行了 nl / 1 调用,以分离输出文件中的解决方案。