ここに私のナレッジベースがあります:
a(b,c).
a(X,Y):-a(Y,X).
これが私のクエリです:a(c,b).
SWI-Prolog を使用しています。このクエリは、プログラムが「true」を出力することにつながると思いました。ただし、代わりに「true」を出力し、セミコロンを押すとtrueを出力し続けます... FOREVERまで。
止まらないのはなぜ?
私の考え: まず、X は b にバインドされ、Y は c にバインドされます。次に、Prolog は a(b,c) をテストし、これが真であることを確認します。したがって、a(c,b) も true であり、SWI-Prolog は true を 1 回出力する必要があります。ただし、そのセミコロンを押し続けている限り、永久に true と出力されるため、何か再帰的なことが起こっていると思われます。これはどこで起こっていますか?ヘルプ!
編集:より具体的には、プログラムが「true」のたびに一時停止し、終了するのではなく、セミコロンまたは別のキーを押すのを待つのはなぜですか? 2 つの述語 human(socrates) と mortal(X):-humans(X) がある場合、クエリ mortal(socrates) に対する応答は 1 つの「true」になります。(上記でこれを明確にできなかった場合は申し訳ありません。)