4

ばかげているように聞こえますが、私の述語 maximum/2 がリスト内の最大の要素を返すとしましょう...出力は次のようになります。

?- largest([1,2,3,4,5], X).
X = 5.
false.

私が実装した最大のものは、「false」を出力しないことを除いて、上記のように機能します。この「false」も出力するようにするにはどうすればよいですか。価値?これは、私が終わらせなければならない厄介な任務のためです。:(

4

4 に答える 4

8

その余分なfalse.またはNoは、プログラムを実行している人がX、最初の可能な解だけでなく、 のすべての可能な解を取得するように要求したことを意味します。

;ほとんどの対話型 Prolog インタープリターでは、セミコロン ( ) キーを押して、別の解決策があるかどうかを確認します。

于 2010-11-24T20:13:49.727 に答える
1

述語が失敗した場合、自由変数のバインディングは発生しないため、不可能のように聞こえます。

 ?- A=5.
A = 5.

 ?- A=5,false.
false.

でも

 ?- A=5;false.
A = 5 ;
false.

これを実現するには、述語を「最大」の非決定論的にする必要があります。しかし、私にはこれはかなりばかげているようです。

于 2010-11-24T20:31:34.167 に答える