swipl
とのやりとりが矛盾しているように見える理由を理解したいと思います。なぜswiplからの一貫性のない応答?
これは典型的な例です。私は、以下の定義が含まれてナレッジベースを相談しているとします
私は私の画面は、私はプロンプトでmax([0, 1, 2], X).
を入力した後にどのように見えるかを示し、そして
は Enterを押し下
acc_max([H|T], A, Max) :- H > A, acc_max(T, H, Max).
acc_max([H|T], A, Max) :- H =< A, acc_max(T, A, Max).
acc_max([], A, A).
max([H|T], Max) :- acc_max(T, H, Max).
:
?- max([0, 1, 2], X).
X = 2 ▮
( ▮
は、カーソルの位置を示す。)
注、特に、インタープリタの次のプロンプトがまだ現れていないこと。ここで
は私がを入力した後、画面が次のようになります。:
?- max([0, 1, 2], X).
X = 2 ;
false.
?- ▮
今、私は最終的にインタプリタのプロンプトを取得します。これとは対照的に
、私は私の画面は、私はプロンプトでmax([2, 0, 1], X).
を入力した後にどのように見えるかを示し、およびを打つを入力下回っ:この時間は、私はすぐに通訳者のプロンプトを得たことを
?- max([2, 0, 1], X).
X = 2.
?- ▮
お知らせ - 私がやりました入力する必要はありません;。また、false
もありません。
私は(例えば、時には出力true.
は、画面上に示しているが、他の同様の状況ではない)他の多くの同様の矛盾を見つけました。プロローグに新人として
、私はそのような矛盾が(彼らは、私は本当に何が起こっているの見当もつかないを持っていないことを一定のリマインダーであることから、落胆言及しないように)当惑を見つけます。
これらの矛盾を合理化するための簡単な方法はありますか?
また、SWI-Prologのはよりも、より一貫性と予測可能な相互作用を提供プロローグの一部の実装はありますか?
これは、Prologの「選択ポイント」と関係があります。あなたの最初の例では、入力に相対的な解を見つけた順序のために、Prologは解答 'X = 2'を提示した後に探求する選択肢があったので、それ以上検索しましたが、 2番目のケースでは、「X = 2」が決定され、選択ポイントはありませんでした。 – lurker