7

私は本Programming in Prolog: Using the ISO Standardに従って Prolog を学び始めました 。言語のイントロの 7 ページで、彼らは次のように断言ます。では、なぜor の代わりにandステートメントをSWI-Prolog使用するのでしょうか?falsetrueyesno

4

2 に答える 2

11

まず、ISO 標準 (ISO/IEC 13211-1:1995) ではトップレベル ループが定義されていません。1 スコープでは、次のように書かれています。

注 — ISO/IEC 13211 のこのパートでは、次のことを指定していません。

...

f)
Prolog プロセッサのユーザー環境 (トップレベル ループ、デバッガ、ライブラリ システム、エディタ、コンパイラなど)。

伝統的に、クエリの答えはイエスかノーで答えられてきました。はいの場合、存在する場合、回答の置換が表示されました。

今日では、回答にますます多くの制約が存在するため、従来のトップレベル ループを使用するのは少し面倒になっています。の正解は ?- dif(X,a).? これはyesではありません。Jaffar らの CLP(R)によって最初に使用された、 maybeである可能性があります。しかし、非常に頻繁に答えを再利用したいと思うでしょう。

?- dif(X,a).
dif(X,a).

?- dif(b,a).
true.

?- true.
true.

Prolog IV の先駆的なトップレベルに従って、SWI のアイデアは、テキストを回答として生成し、貼り付けて元に戻してまったく同じ結果を得ることができるようにすることです。このようにして、回答の構文はある程度指定されます - それは有効な Prolog テキストでなければなりません。

では、「はい」がなくなったのなら、なぜ「いいえ」が必要なのでしょうか? このため、SWI がfalse.回答として提供します。SWI の前に、Prolog IVは応答しfalseました。たとえば、SWI の次の修正点に注意してください。

?- true; false.
true ;
false.

したがって、この小さな詳細でさえ回答に保持されます。一方、Prolog IV では、Prolog IV ではtrueすべての回答が一挙に表示されるため、これは折りたたまれています。

?- true ; false.

true.

回答の詳細については、これを参照してください。

于 2015-07-01T14:35:19.733 に答える