Programming languages Erlang中非短路布尔运算符的用途是什么?
我正在从LearnyYouSomeerlang网络书学习Erlang。在学习过程中,有一件事让我印象深刻,那就是非短路布尔连接和分离运算符,即<代码>和和Programming languages Erlang中非短路布尔运算符的用途是什么?,programming-languages,functional-programming,erlang,logic-programming,Programming Languages,Functional Programming,Erlang,Logic Programming,我正在从LearnyYouSomeerlang网络书学习Erlang。在学习过程中,有一件事让我印象深刻,那就是非短路布尔连接和分离运算符,即和和或。这些操作员的用例是什么?为什么要使用它们而不是和和或或 在R13A之前,andalso和orelse都不是尾部递归的。有关详细信息,请参阅。我认为没有充分的理由在新程序中使用和/或。和/或运算符只是旧得多。andalso/orelse运算符是后来添加的。和/或今天的一个用例可能是,您只想执行一些简单的布尔运算,而水平空间比可能节省几个机器周期更重要
或
。这些操作员的用例是什么?为什么要使用它们而不是和和或或 在R13A之前,andalso
和orelse
都不是尾部递归的。有关详细信息,请参阅。我认为没有充分的理由在新程序中使用和/或。和/或运算符只是旧得多。andalso/orelse运算符是后来添加的。和/或今天的一个用例可能是,您只想执行一些简单的布尔运算,而水平空间比可能节省几个机器周期更重要。例如:
X = Y and (A or B),
而不是
X = Y andalso (A orelse B),
对眼睛来说比较容易
出于向后兼容性的原因,不可能仅仅改变原始的行为和/或变得短路,因此需要新的关键字。名称和ALSO/orelse来自标准ML。我认为它们在做不同的事情,并使用它们:
和
/或
作为逻辑运算符,我要在其中比较逻辑值。由于它们很严格,我会自动进行类型检查,并且我确切地知道所称的内容
- 用于控制的
和/orelse
,与C中的&
和|
非常相似
看到erlang中定义了错误,我觉得很高兴知道执行了什么以及如何执行。标记为逻辑编程
,因为我被告知这与Prolog中erlang的起源有关。相关:。有趣的链接。谢谢你的回答!1. andalso
和orelse
也可以用作逻辑运算符。2.我一点也不懂类型检查。3.知道所调用的内容与引用透明表达式无关;它只与副作用相关。我认为Robert所说的是,有时您希望对所有操作数求值,以便它们可以引发异常,即使它们不是求值谓词所必需的。这是一个很好的观点。@dsmith:是的,这两种方法都可以用来检查它们是否实际返回布尔值。我可能过于谨慎,但尽早发现错误是件好事。