【问题标题】:Print the results in a txt file with prolog使用 prolog 将结果打印到 txt 文件中
【发布时间】:2016-11-14 17:01:01
【问题描述】:

我正在使用 Prolog 和 clpd 来解决布尔问题。我有下面这样的规则:

:- use_module(library(clpb)).

fun(A, B, C, D, E) :-
    sat(A + B + C, D),
    sat(E),
    labeling([A, B, C, D, E]);

是否可以将结果打印到文件中?我该怎么办?

【问题讨论】:

  • *.com/q/18674731/535275的可能重复
  • 我不知道是否重复...另一个线程谈论列表。这是布尔逻辑,查看其他线程我不明白如何将结果写入 txt。
  • 究竟是哪个结果?你将如何运行这个程序?你能显示你的文本文件应该包含什么吗?
  • 我已经写了这个程序:pastebin.com/UXEas1HJ 但我无法写入文件,因为我收到错误。

标签: prolog clpb


【解决方案1】:

您的代码有一些简单的错误。你可以试试这个版本(改变了一些小东西):

:- use_module(library(clpb)).

fun(A, B, C, D, E) :-
    open('test1234.txt',write,ID),
     (  sat(A + B + C + D),
        sat(E),
        labeling([A, B, C, D, E]),
        write(ID, labeling([A, B, C, D, E]) ),nl(ID), fail
        ;   close(ID)
      ).

现在如果你查询:

?- fun(A,B,C,D,E).
true.

“test1234.txt”将在您当前的工作目录中创建。 “test1234.txt”文件包含:

labeling([0,0,0,1,1])
labeling([0,0,1,0,1])
labeling([0,0,1,1,1])
labeling([0,1,0,0,1])
labeling([0,1,0,1,1])
labeling([0,1,1,0,1])
labeling([0,1,1,1,1])
labeling([1,0,0,0,1])
labeling([1,0,0,1,1])
labeling([1,0,1,0,1])
labeling([1,0,1,1,1])
labeling([1,1,0,0,1])
labeling([1,1,0,1,1])
labeling([1,1,1,0,1])
labeling([1,1,1,1,1])

【讨论】:

  • 不错!您可以通过使用setup_call_cleanup/3 在任何情况下可靠地关闭文件来使这一点变得更好。
  • 是的,我的错误真的很愚蠢,我为同一个流使用了两个不同的名称,关于“nl”我不知道诀窍,但它工作得很好。无论如何,如果我想保存结果并在 prolog 终端中显示结果(我使用 SWI-Prolog)我应该怎么做?因为 atm 只保存了结果。
  • @NxA 我不知道如何返回结果,但您可以使用 print/1 打印它。
  • 使用writeq/1写信要可靠得多。并以. 结束,以便可以回读输出。
最近更新 更多