15

我正在通过 LearnYouSomeErlang 网络书学习 Erlang。学习时让我印象深刻的一件事是非短路布尔连接和析取运算符,即;andor。这些运算符的用例是什么?为什么要使用它们而不是andalsoand orelse

4

3 回答 3

13

它曾经是(直到 R13A)andalso并且orelse不是尾递归的。有关详细信息,请参见http://www.erlang.org/eeps/eep-0017.html。我认为没有充分的理由在程序中使用and/ 。or

于 2011-11-11T09:06:06.043 回答
5

我认为它们在做不同的事情并像这样使用它们:

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

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

于 2011-11-11T12:08:08.937 回答
4

和/或运算符只是更老了。andalso/orelse 运算符是后来添加的。和/或今天的用例可能是当您只想执行一些简单的布尔运算并且水平空间比可能节省几个机器周期更重要时。例如:

X = Y and (A or B),

而不是

X = Y andalso (A orelse B),

对眼睛来说更容易一些。

出于向后兼容的原因,不可能仅仅改变原始的行为和/或变成短路,因此需要新的关键字。名称 andalso/orelse 来自标准 ML。

于 2011-11-11T10:07:15.127 回答