【问题标题】:Boolean implies another布尔值意味着另一个
【发布时间】:2014-01-04 20:15:52
【问题描述】:

是否有一种编程语言可以让我们编写如下内容:

a => b

计算含义? (其中ab 是布尔值)

我能找到的最接近的是 Scala:

a <= b

但它看起来和“蕴涵”的实际含义完全不同。

【问题讨论】:

  • 如果您对a -&gt; b 的布尔表达式感兴趣,那么您可以使用它与(not a) or b 等效的事实。所以在C 中,a -&gt; b 的等价物是!a || b
  • 是的,我知道这个事实。但它不如箭头之类的东西好。
  • 我所知道的程序语言没有明确的a -&gt; b,因为它作为“纯逻辑表达式”并不会真正增加很多价值。归根结底,如果程序员正在寻找那种类型的真值,那么他们的真正意思是(not a) or b,这更容易理解。当然,if-then 语句在程序上一直出现,因此无处不在(我意识到这不是一回事)。 Prolog 有一个含义(-&gt;),但它与其他语言的布尔表达式不太一样。
  • 我不同意这样一个事实,即这不会增加逻辑表达式的价值。我问这个问题是因为我有时会遇到逻辑表达式,如果我用箭头写它们比(不是 a)或 b 更有意义。就我而言,if((condition1 =&gt; condition2) &amp;&amp; (!condition1 =&gt; condition3)) statement 看起来比 if((!condition1 || condition2) &amp;&amp; (condition1 || condition3)) statement 更好
  • 在 C++ 中,您可以定义一个运算符并使其以这种方式工作。我只说它是“有限使用”,因为如果我在代码中看到if (A =&gt; B),在我的脑海中我会将它翻译成(not A) or B 以弄清楚它的作用。但那是因为我不习惯认为“假意味着真”是真的。写!A || BA =&gt; B 相当简短,因此引入新运算符的动机并不高。至少我推测这就是它在程序语言中不流行的原因(并且可能是为了避免与实际的程序 if-then 结构混淆)。

标签: boolean logic truthtable


【解决方案1】:

所以获胜者是 Scala:

implicit class BooleanMagic(val b: Boolean) extends AnyVal {
  def ==>(other: =>Boolean) = !b || other
}

多亏了:

> true ==> false
res0: Boolean = false

> false ==> (throw new Exception("I'm the president"))
res1: Boolean = true

【讨论】:

    猜你喜欢
    • 2012-12-10
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多