3

在 Erlang 中,=>用于比较两个变量会导致语法错误,您必须>=改用:

1> 10 => 5.
* 1: syntax error before: '>'
2> 10 >= 5.
true

这是为什么?这同样适用于<=必须写为 的情况=<。这是因为 Erlang 总是使用这种语法,还是因为序列=>>=在其他地方使用?

4

3 回答 3

6

只是为了确认其他人所说的:我们使用了与 Prolog 相同的比较运算符。我不能确定它为什么会这样,但一个原因可能是它离开<=并被=>用作“箭头”,这可能很有用。在 Prolog 中很容易定义新的操作符,所以即使它们不是用基本语言定义的,它们仍然非常有用:

:- op(Priority, Type, Operator).

Erlang 中的<=运算符是一个二进制生成器,可用于列表/二进制推导。它的工作方式类似于<-二进制文件而不是列表。

于 2012-07-27T13:58:58.037 回答
5

嗯,Erlang 的语法受到 Prolog 的影响,Prolog 使用相同的约定,所以这可能就是原因。

我不确定 Prolog 为什么使用>=and =<; =><=没有真正使用。我认为这是因为=>and<=是通常用于逻辑含义的运算符,因此使用它们进行比较确实很尴尬,尤其是在逻辑编程语言中。它也是更漂亮的恕我直言:b

于 2012-07-27T11:14:07.957 回答
3

这可能只是一个 Erlang 约定。我猜测的原因与我们如何发音这些符号有关:“大于或等于”、“小于或等于”。它实际上是 ASCII 中大于或等于/小于或等于符号的呈现,因此在某些时候有人决定标记应该是<=and >=,并且约定在大多数语言中都存在,但这是相当随意的。也许他们正试图为这些运算符的不对称性质创建某种表示。

还值得注意的是,许多语言=>用来表示某种箭头,例如将函数的主体与其参数分开,或者作为逻辑蕴涵。不确定是不是相反的。

编辑:Erlang 似乎<=在理解中使用,这就是为什么他们避免使用它作为比较运算符,而是选择了(稍微向后的)语法。

于 2012-07-27T10:46:04.243 回答