5

全部。

我想为变量分配一个布尔值。

我试过类似的东西。

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

没有工作...

有什么解决办法吗?

4

3 回答 3

5

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

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

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

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

因此,您可能需要考虑表示的语义并构建一些谓词来操作您的布尔值,可能会添加一些运算符来“扩展”prolog 一点。

于 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 回答