在 Erlang 中,=>
用于比较两个变量会导致语法错误,您必须>=
改用:
1> 10 => 5.
* 1: syntax error before: '>'
2> 10 >= 5.
true
这是为什么?这同样适用于<=
必须写为 的情况=<
。这是因为 Erlang 总是使用这种语法,还是因为序列=>
并>=
在其他地方使用?
在 Erlang 中,=>
用于比较两个变量会导致语法错误,您必须>=
改用:
1> 10 => 5.
* 1: syntax error before: '>'
2> 10 >= 5.
true
这是为什么?这同样适用于<=
必须写为 的情况=<
。这是因为 Erlang 总是使用这种语法,还是因为序列=>
并>=
在其他地方使用?
只是为了确认其他人所说的:我们使用了与 Prolog 相同的比较运算符。我不能确定它为什么会这样,但一个原因可能是它离开<=
并被=>
用作“箭头”,这可能很有用。在 Prolog 中很容易定义新的操作符,所以即使它们不是用基本语言定义的,它们仍然非常有用:
:- op(Priority, Type, Operator).
Erlang 中的<=
运算符是一个二进制生成器,可用于列表/二进制推导。它的工作方式类似于<-
二进制文件而不是列表。
嗯,Erlang 的语法受到 Prolog 的影响,Prolog 使用相同的约定,所以这可能就是原因。
我不确定 Prolog 为什么使用>=
and =<
; =>
并<=
没有真正使用。我认为这是因为=>
and<=
是通常用于逻辑含义的运算符,因此使用它们进行比较确实很尴尬,尤其是在逻辑编程语言中。它也是更漂亮的恕我直言:b
这可能只是一个 Erlang 约定。我猜测的原因与我们如何发音这些符号有关:“大于或等于”、“小于或等于”。它实际上是 ASCII 中大于或等于/小于或等于符号的呈现,因此在某些时候有人决定标记应该是<=
and >=
,并且约定在大多数语言中都存在,但这是相当随意的。也许他们正试图为这些运算符的不对称性质创建某种表示。
还值得注意的是,许多语言=>
用来表示某种箭头,例如将函数的主体与其参数分开,或者作为逻辑蕴涵。不确定是不是相反的。
编辑:Erlang 似乎<=
在理解中使用,这就是为什么他们避免使用它作为比较运算符,而是选择了(稍微向后的)语法。