在Erlang中使用非短路布尔运算符有什么用?

时间:2011-11-11 07:04:30

标签: programming-languages functional-programming erlang logic-programming

我正在从LearnYouSomeErlang网络书籍学习Erlang。学习过程中让我感到震惊的一件事是非短路布尔连接和分离算子即可; andor。这些运营商的用例是什么?为什么要使用它们而不是andalsoorelse

3 个答案:

答案 0 :(得分:12)

过去(直到R13A)andalsoorelse不是尾递归的。有关详细信息,请参阅http://www.erlang.org/eeps/eep-0017.html。我认为没有充分理由在计划中使用and / or

答案 1 :(得分:5)

我认为他们做了不同的事情并使用它们:

  • and / or作为逻辑运算符,我想比较逻辑值。由于它们非常严格,我会自动进行类型检查,并且我知道确切地称之为。
  • andalso / orelse用于控制,非常类似于C中的&&||

在erlang中定义了错误,我觉得知道已经执行了什么以及它是如何运行的。

答案 2 :(得分:4)

和/或运营商的年龄要大得多。 andalso / orelse运算符是后来添加的。用于和/或今天的用例可能是您只想执行一些简单的布尔操作,而水平空间比可能节省几个机器周期更重要。例如:

X = Y and (A or B),

而不是

X = Y andalso (A orelse B),

眼睛有点容易。

出于向后兼容性的原因,不可能只改变原始行为和/或变短路,因此需要新的关键字。名称和其他/矿石来自标准ML。