Prolog中的布尔赋值

时间:2011-09-28 16:38:44

标签: prolog clpfd

所有

我想为变量赋一个布尔值。

我尝过类似的东西。

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

没有工作......

任何解决方案?

3 个答案:

答案 0 :(得分:3)

Prolog的内置谓词is/2将表达式的右侧评估为算术表达式,并将结果与​​左侧统一。

此外,prolog没有布尔类型。 Prolog的内置类型是

  • 整数
  • 原子
  • 未绑定的变量
  • 复合词

您可以选择将布尔值表示为原子true / false(对于可读性很有用),或者您可以将布尔值表示为整数值1 / {{ 1}}(对计算很有用)。大多数程序语言(如C)将算术值评估为布尔值的方式是破坏WRT形式逻辑,但是:虚假是单值(0)和真值多值(非零),这意味着它不是假的。在形式逻辑中,真理是单值的,虚假定义为不真实的。

所以你可能想要考虑你的表示的语义并构建一些谓词来操纵你的布尔值,可能会添加一些运算符来“扩展”prolog。

答案 1 :(得分: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).

答案 2 :(得分:1)

怎么样?
diagonal(XPiece, XFinal) :- XPiece = XFinal.