4
man(alan).
man(john).
man(george).

list_all:-
  man(X),
  write(X),
  fail.

问题?-list_all给出了答案:

alan
john
george
false

所以我有数据库中的所有男人。有用!我的问题:我想获得相同的列表,但导出到.txt文件。我尝试使用此代码来执行此操作:

program  :-
  open('file.txt',write,X),
  current_output(CO),
  set_output(X),
  man(X),
  write(X),
  fail,
  close(X),
  set_output(CO).

效果是:程序给出答案false和文本:alan john george不在.txt文件中 - 因为使用fail谓词。

是否可以在不使用谓词的情况下将列表中的所有项目放入.txt文件中(写入数据库中的所有选项) ?fail

我怎样才能做到这一点?请帮我。

4

1 回答 1

8

您快到了。但是调用fail/0阻止流被关闭。尝试例如:

program :-
    open('file.txt',write, Stream),
    (   man(Man), write(Stream, Man), fail
    ;   true
    ),
    close(Stream).

使用事实上的标准forall/2谓词的替代方法可能是:

program :-
    open('file.txt',write, Stream),
    forall(man(Man), write(Stream,Man)),
    close(Stream).

, , ,

于 2013-09-07T15:44:30.477 回答