我从LearnYouSomeErlang网络书上学习Erlang。有一件事让我感到震惊,那就是非短路布尔连接和分离运算符,也就是说, and
和or
。这些操作员的用例是什么?你为什么要使用它们而不是andalso
和orelse
?Erlang中非短路布尔运算符的用途是什么?
回答
它曾经是(直到R13A)andalso
和orelse
不是尾递归。详情请参阅http://www.erlang.org/eeps/eep-0017.html。我不认为这是一个很好的理由在新程序使用and
/or
。
有趣的链接。感谢你的回答! – missingfaktor
的和/或运营商只是老得多。 andalso/orelse运营商是后来增加的。当前和/或今天的用例可能是当你只想执行一些简单的布尔操作时,水平空间比可能节省几个机器周期更重要。例如:
X = Y and (A or B),
而不是
X = Y andalso (A orelse B),
是对眼睛更容易一些。
为了向后兼容的原因,不可能只是改变原来的和/或行为变成短路,所以需要有新的关键字。标准ML还有其他名称和名称。
我看到他们做不同的事情,并把它们作为这样的:
and
/or
逻辑运算符,我想比较的逻辑值。由于它们很严格,我会自动进行类型检查,并且我会自动进行类型检查。在C.andalso
/orelse
控制,就像&&
和||
发现错误,在二郎定义,我觉得这是很好的了解已经执行,以及它如何去。
1.'andalso'和'orelse'也可以用作逻辑运算符。 2.我不了解类型检查的一点。 3.知道所称的内容与引用透明的表达无关;它只是在副作用的情况下才有意义。 – missingfaktor
我认为罗伯特所说的是,有时候你希望所有的操作数都被评估,以便他们能够引发异常,即使它们不是评估谓词所必需的。这是一个很好的观点。 – dsmith
@dsmith:是的,这两个,并检查他们实际上返回布尔值。我可能过于谨慎,但尽可能早地发现错误是件好事。 – rvirding
- 1. 运算符“^”的用途是什么?
- 2. JS中布尔运算符的优先顺序是什么?
- 3. c#布尔运算符 - 正常与短路
- 4. Python函数注释中的=运算符的用途是什么?
- 5. Java中的= +运算符的用途是什么?
- 6. python中`//`运算符的用途是什么?
- 7. bash是否有一个不会短路的布尔值和/或运算符?
- 8. 布尔运算符的位运算符
- 9. 布尔运算符++
- 10. 布尔运算的<=(小于或等于)运算符的含义是什么?
- 11. Java/Scala中的非短路逻辑(布尔)运算符有很好的用处吗?
- 12. JavaScript中布尔转换语句的用途是什么?
- 13. 比较值与'='时,'=='运算符的用途是什么?
- 14. 一元加减运算符的重要用途是什么?
- 15. __builtin_offsetof运算符的用途和返回类型是什么?
- 16. 为什么要用两个'!'一个布尔值的运算符?
- 17. c#是否将&&和| =运算符短路
- 18. 什么(在规格中)保证“非短路逻辑运算符实际上不会短路?
- 19. 什么是“!”当与非布尔变量一起使用时,运算符是否意味着在javascript中?
- 20. 在PHP中使用布尔运算符
- 21. 布尔运算VS位运算符
- 22. 布尔或包含三元条件运算不会被短路
- 23. matlab布尔运算符
- 24. SQL Server布尔运算符
- 25. 布尔运算符问题
- 26. 与布尔运算符
- 27. 布尔赋值运算符
- 28. Thymeleaf - 布尔运算符
- 29. 与布尔运算符
- 30. 布尔赋值运算符
用'逻辑Programming'标签,因为有人告诉我,这已经是与Erlang的Prolog语言的起源。 – missingfaktor
相关:[当偏爱'和''上在andalso'后卫试验](http://stackoverflow.com/questions/6025132/when-to-prefer-and-over-andalso-in-guard-tests)。 – kay