【发布时间】:2012-11-10 04:37:16
【问题描述】:
全部。
我想为变量分配一个布尔值。
我尝试过类似的东西。
Diagonal is (XPiece = XFinal)
Diagonal is (XPiece =:= XFinal)
Diagonal is (XPiece is XFinal)
没有工作...
有什么解决办法吗?
【问题讨论】:
-
\+(diagonal(FormerX, X),中的左括号在哪里关闭?
全部。
我想为变量分配一个布尔值。
我尝试过类似的东西。
Diagonal is (XPiece = XFinal)
Diagonal is (XPiece =:= XFinal)
Diagonal is (XPiece is XFinal)
没有工作...
有什么解决办法吗?
【问题讨论】:
\+(diagonal(FormerX, X), 中的左括号在哪里关闭?
Prolog 的内置谓词is/2 将表达式的右侧计算为算术表达式,并将结果与左侧统一。
另外,prolog 没有布尔类型。 Prolog 的内置类型是
您可以选择将布尔值表示为原子true/false(有助于可读性),或者您可以将布尔值表示为整数值1/0(用于计算) .大多数过程语言,如 C,将算术值评估为布尔值的方式被破坏了 WRT 形式逻辑,但是:假是单值 (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.
【讨论】: