0

私には約1000の可能性があるこの述語があり、出力としてすべての可能性が必要です。上にスクロールすることしかできないため、WindowsのSWI-Prologにリストされているすべての可能性を単純にコピーして貼り付けることはできません。

私の述語は次のようになります。

?- question(X,Y,Z).
X = 'Fo',
Y = 'Ob',
Z = 'Ar' ;
X = 'Fo2',
etc...

結果をファイルなどに保存する方法はないかと思いました。

4

3 に答える 3

3

findall/3を使用します。

findall([X,Y,Z],question(X,Y,Z),R).

Rは、question(X、Y、Z)が成功するように、すべての[X、Y、Z]のリストにバインドされます。

詳細については、FindallのDocumentatinを参照してください。

于 2013-02-01T01:10:45.887 に答える
1

次のようなものを使用できます。

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 ).すべてのソリューションを標準出力(画面)で取得することもできます。

于 2013-02-01T01:23:17.863 に答える
0

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).
于 2013-02-01T07:07:28.627 に答える