全て。
ブール値を変数に代入したい。
のようなものを試しました。
Diagonal is (XPiece = XFinal)
Diagonal is (XPiece =:= XFinal)
Diagonal is (XPiece is XFinal)
何も動作しません...
解決策はありますか?
Prolog の組み込み述語is/2
は、式の右辺を算術式として評価し、結果を左辺と統合します。
また、プロローグにはブール型がありません。Prolog の組み込み型は次のとおりです。
ブール値をアトムtrue
/ (読みやすくするのに便利) として表すことも、ブール値を整数値/ (計算に役立つ)false
として表すこともできます。ただし、C などのほとんどの手続き型言語が算術値をブール値として評価する方法は、WRT の形式論理が壊れています。偽は単一値 (0) であり、真は複数値 (ゼロ以外) であり、どちらが偽でないかを意味します。形式論理では、真は一価であり、偽は真でないものとして定義されます。1
0
したがって、表現のセマンティクスを検討し、ブール値を操作するための述語をいくつか作成し、プロローグを少し「拡張」するためにいくつかの演算子を追加することをお勧めします。
if-then-elseを使用します。
(XPiece = XFinal ->
Diagonal = true
;
Diagonal = false
)
または1
/ 0
、またはあなたが望むものを使用してください。または、必要なイディオムをサポートするCLP(FD)を使用します。
use_module(library(clpfd)).
diag(XPiece, XFinal, Diagonal) :-
Diagonal #= (XPiece #= XFinal).
どうですか
diagonal(XPiece, XFinal) :- XPiece = XFinal.