5

全て。

ブール値を変数に代入したい。

のようなものを試しました。

Diagonal is (XPiece = XFinal)
Diagonal is (XPiece =:= XFinal)
Diagonal is (XPiece is XFinal)

何も動作しません...

解決策はありますか?

4

3 に答える 3

5

Prolog の組み込み述語is/2は、式の右辺を算術式として評価し、結果を左辺と統合します。

また、プロローグにはブール型がありません。Prolog の組み込み型は次のとおりです。

  • 整数
  • 浮く
  • 原子
  • 非バインド変数
  • 複合語

ブール値をアトムtrue/ (読みやすくするのに便利) として表すことも、ブール値を整数値/ (計算に役立つ)falseとして表すこともできます。ただし、C などのほとんどの手続き型言語が算術値をブール値として評価する方法は、WRT の形式論理が壊れています。偽は単一値 (0) であり、真は複数値 (ゼロ以外) であり、どちらが偽でないかを意味します。形式論理では、真は一価であり、偽は真でないものとして定義されます。10

したがって、表現のセマンティクスを検討し、ブール値を操作するための述語をいくつか作成し、プロローグを少し「拡張」するためにいくつかの演算子を追加することをお勧めします。

于 2011-09-28T16:58:39.540 に答える
3

if-then-elseを使用します。

(XPiece = XFinal ->
    Diagonal = true
;
    Diagonal = false
)

または1/ 0、またはあなたが望むものを使用してください。または、必要なイディオムをサポートするCLP(FD)を使用します。

use_module(library(clpfd)).

diag(XPiece, XFinal, Diagonal) :-
    Diagonal #= (XPiece #= XFinal).
于 2011-09-29T08:36:25.803 に答える
1

どうですか

diagonal(XPiece, XFinal) :- XPiece = XFinal.
于 2011-09-28T16:46:55.867 に答える