2011-09-28 89 views
3

全部。Prolog中的布尔赋值操作

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

我试过类似的东西。

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

无工作......

任何解决方案?

+0

哪里左方括号中'\ +(对角线(FormerX,X)关闭,' – Jiri

+0

得到它谢谢 –

回答

3

的Prolog的内部谓词is/2计算表达式的右侧作为一个算术表达式并结合与左侧的结果。

另外,prolog没有布尔类型。序言的内置类型是

  • 整数
  • 浮子
  • 原子
  • 未结合的可变
  • 化合物术语

你可以选择将表示一个布尔值作为原子true/false(有助于阅读),或者您可以将整数值表示为一个布尔值1/0(用于计算)。尽管大多数过程语言,比如C,都将算术值作为布尔值来破坏WRT形式逻辑,但是:伪造是单值(0)和真值(非零),这意味着这不是错误的。在形式逻辑中,真理是单值的,虚假被定义为不真实的。

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

+0

我明白了,谢谢。 –

1

什么

diagonal(XPiece, XFinal) :- XPiece = XFinal. 
+0

我有!想到这一点,但我希望在这个特定的谓词中计算这个值,然后再传递给它将要传递给它的谓词。 –

+0

@Francisco:你能给更多的上下文吗? – Jiri

+0

是的,我意识到我的问题是缺乏这一点。只需一秒钟。 –

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).