私には約1000の可能性があるこの述語があり、出力としてすべての可能性が必要です。上にスクロールすることしかできないため、WindowsのSWI-Prologにリストされているすべての可能性を単純にコピーして貼り付けることはできません。
私の述語は次のようになります。
?- question(X,Y,Z).
X = 'Fo',
Y = 'Ob',
Z = 'Ar' ;
X = 'Fo2',
etc...
結果をファイルなどに保存する方法はないかと思いました。
私には約1000の可能性があるこの述語があり、出力としてすべての可能性が必要です。上にスクロールすることしかできないため、WindowsのSWI-Prologにリストされているすべての可能性を単純にコピーして貼り付けることはできません。
私の述語は次のようになります。
?- question(X,Y,Z).
X = 'Fo',
Y = 'Ob',
Z = 'Ar' ;
X = 'Fo2',
etc...
結果をファイルなどに保存する方法はないかと思いました。
findall/3を使用します。
findall([X,Y,Z],question(X,Y,Z),R).
Rは、question(X、Y、Z)が成功するように、すべての[X、Y、Z]のリストにバインドされます。
次のようなものを使用できます。
main :-
tell('output.txt'),
(
question(X,Y,Z),
writeln([X, Y, Z]),
fail
;
told
).
または、Prologでクエリを実行し、( question(X,Y,Z), writeln([X, Y, Z]), fail ; true ).
すべてのソリューションを標準出力(画面)で取得することもできます。
SWI-Prologは、REPL(Read、Eval、Print、Loop)コンソールで実行される対話を保存する方法を提供します。プロトコルの組み込みを参照してください。このようにして、変数名が保持されます。出力の処理が困難になる可能性があることに注意してください。長い変数は省略記号に置き換えられます(これは変更できます。これらの回答を参照してください)。
そうでなければ、forall /2が実行可能な代替手段になる可能性があります
?- open('a.txt',write,S), forall(member(X,[martin,carlo]), format(S,'~q~n',[X])), close(S).