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にありません。.txtfail

述語を使用せずに、リスト内のすべての項目を.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 に答える