3

Erlang では、 を使用=>して 2 つの変数を比較すると構文エラーが発生するため、>=代わりに次を使用する必要があります。

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

何故ですか?<=と書かなければならないものについても同様です=<。これは、Erlang が常にこの構文を使用したためですか、それともシーケンス=>と他の場所で>=使用されているためですか?

4

3 に答える 3

6

他の人が言ったことを確認するために、Prolog と同じ比較演算子を使用しました。なぜこのようにするのかはわかりませんが、1つの理由は、それが離れ<==>「矢印」として使用されることであり、これは役立つ可能性があります. Prolog では、新しい演算子を定義するのは非常に簡単なので、基本的な言語で定義されていなくても、非常に便利です。

:- op(Priority, Type, Operator).

Erlangの<=演算子 in は、リスト/バイナリ内包表記で使用できるバイナリ ジェネレータです。と同様に機能し<-ますが、リストではなくバイナリで機能します。

于 2012-07-27T13:58:58.037 に答える
5

Erlang の構文は Prolog の影響を受けており、Prolog は同じ規則を使用しているため、おそらくそれが理由です。

Prolog が>=andを使用する理由がわかりません=<=>実際に<=は使用されていません。=><=は通常、論理的含意に使用される演算子であるため、特に論理プログラミング言語では、それらを比較に使用するのは実際には扱いにくいためだと思います。それはまた、私見よりもきれいです:b

于 2012-07-27T11:14:07.957 に答える
3

これはおそらく Erlang の規約にすぎません。私が推測する理由は、「以上」、「以下」という記号の発音方法に関係していると思います。これは実際には ASCII での「より大きい」または「等しい」/「より小さい」または「等しい」記号のレンダリングであるため、ある時点で誰かがトークンを and にすべきであると決定し<=>=慣例はほとんどの言語で固執しています。しかし、それはかなり恣意的です。おそらく、彼らは、これらの演算子の非対称性を何らかの形で表現しようとしていたのでしょう。

=>多くの言語が、関数の本体をその引数から分離する、または論理的含意として、ある種の矢印を意味するために使用することも注目に値します。コンバーチブルについては不明です。

編集: Erlang は<=内包表記を使用しているようです。そのため、Erlang はそれを比較演算子として使用することを避け、代わりに (少し逆の) 構文を選択しました。

于 2012-07-27T10:46:04.243 に答える