2

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

4

1 回答 1

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 在写入谓词上提供了几种流和非流变体,您可以在此处找到相关文档。对于打开关闭查看这个链接那个链接

补充:我加入了一个nl/1调用来分离输出文件中的解决方案。

于 2011-04-26T17:22:48.397 回答