2

プロローグプログラムから取得したすべてのソリューションをファイルに書き込むにはどうすればよいですか?

4

1 に答える 1

4

簡単な答えは、「ソリューション」述語への呼び出しを繰り返し/失敗ループ内にネストすることです。最後から2番目のステップで、ソリューションがファイルに書き込まれます。

投稿には、どのような解決策が含まれるかについての詳細が不足しているため(したがって、用語の記述がどれほど難しいか、たとえば、ある時点で書き込まれたファイルを読み戻すことから1つ以上の用語を復元できるようにする必要がある場合) 、解が単なる整数である簡単な図から始めましょう。

次の非決定論的述語があります。

mySolution(X) :- for(X,1,10).

for/3は、GNUPrologの組み込み述語です。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のストリーム機能を使用するか、コンソール出力のコマンドラインリダイレクトを実行することによって実現できます。多くの場合、2番目の可能性はより単純で柔軟性がありますが、最初の可能性を説明します。

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 に答える