【问题标题】:Boolean assignment in PrologProlog 中的布尔赋值
【发布时间】:2012-11-10 04:37:16
【问题描述】:

全部。

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

我尝试过类似的东西。

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

没有工作...

有什么解决办法吗?

【问题讨论】:

  • \+(diagonal(FormerX, X), 中的左括号在哪里关闭?

标签: prolog clpfd


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    使用 if-then-else:

    (XPiece = XFinal ->
        Diagonal = true
    ;
        Diagonal = false
    )
    

    或使用1/0,或任何你想要的。或者,使用支持您想要的成语的 CLP(FD):

    use_module(library(clpfd)).
    
    diag(XPiece, XFinal, Diagonal) :-
        Diagonal #= (XPiece #= XFinal).
    

    【讨论】:

      【解决方案3】:

      怎么样

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

      【讨论】:

      • 我曾想过这一点,但我希望在将值传递给将要输入的谓词之前,先在此特定谓词中计算该值。
      • @Francisco:你能提供更多背景信息吗?
      • 是的,我意识到我的问题缺乏这一点。等一下。
      猜你喜欢
      • 2021-10-15
      • 2017-10-30
      • 2012-09-20
      • 2014-08-22
      • 1970-01-01
      • 2013-07-07
      • 1970-01-01
      • 1970-01-01
      • 2015-04-10
      相关资源
      最近更新 更多