=:=
Erlang の関数を演算子, ==
, <
, >
,=<
と比較するとはどういう意味>=
ですか?
私はインタプリタをいじっていて、これらの結果を得ました:
Eshell V5.9.2 (abort with ^G)
1> X = fun() -> {} end.
#Fun<erl_eval.20.82930912>
2> Y = fun() -> {} end.
#Fun<erl_eval.20.82930912>
3>
3> {X == X, X =:= X}.
{true,true}
4> {X >= X, X =< X}.
{true,true}
5> {X > X, X < X}.
{false,false}
6>
6> {X == Y, X =:= Y}.
{true,true}
7> {X >= Y, X =< Y}.
{true,true}
8> {X > Y, X < Y}.
{false,false}
意味あり。2 つの関数の抽象構文ツリーを比較しているようです。
しかし、このセッションX
でY
は と は再び同じように定義されていますが、今も違いX<Y
ますか?
Eshell V5.9.2 (abort with ^G)
1> X = fun() -> {} end.
#Fun<erl_eval.20.82930912>
2>
2> {X == X, X =:= X}.
{true,true}
3> {X >= X, X =< X}.
{true,true}
4> {X > X, X < X}.
{false,false}
5>
5> Y = fun() -> {} end.
#Fun<erl_eval.20.82930912>
6>
6> {X == Y, X =:= Y}.
{false,false}
7> {X >= Y, X =< Y}.
{false,true}
8> {X > Y, X < Y}.
{false,true}
したがって、ASTや一意の参照を比較していないようです。参照を比較しているのかもしれませんが、いくつかの最適化が行われてX
おりY
、同じ参照にバインドされていますか? これについて何らかの説明がある場合、異なる VM または異なるノードで何が起こるでしょうか?