ユニークなErlang--Eralng学習ノート(1)
A language that doesn’t affect the way you think about programming is
not worth knowing. --- Alan Perlis
Erlangは小さな言語ですが、合併の面で非常に優れており、独特の哲学と文法があり、理解に値する言語です.]Erlangの特徴的なところをご紹介します.
変数に値がない場合は、付与に使用できます.例えば
検査にも使用できます.
dispatchとして使用されます.
guardsはrubyのcaseに似ていて、違いは方法を定義するために使用することができて、このようにして、1つの方法は異なる部分に分解されて、Erlangの方法をもっと短くします.
filter:
より短いfilter:
Erlangでは再帰が多く用いられている.再帰には2つの利点があり,1つは問題を分解し,問題を容易に処理できるようにすることである.1つは、再帰的に表示できるメンテナンス状態であり、付与を回避し、immutableを維持し、メンテナンスを容易にし、同時実行を容易にすることです.
Erlangは非常にユニークで、これらのユニークな点はプログラマーが問題を分解し、Erlangのコードをよりよく維持するのに役立ちます.
not worth knowing. --- Alan Perlis
Erlangは小さな言語ですが、合併の面で非常に優れており、独特の哲学と文法があり、理解に値する言語です.]Erlangの特徴的なところをご紹介します.
Pattern matching
変数に値がない場合は、付与に使用できます.例えば
X = 1.
A = [1, 2, 3].
[H|T] = A.
H = 1.
T = [2, 3].
検査にも使用できます.
point % atome, ruby symbol
Point = {point, 10, 45}.
{point, X, Y} = Point. % X = 10, Y = 45
{abc, X, Y} = Point.
% ** exception error: no match of right hand side value {point,10,45}
{point, Z, Z} = Point.
% ** exception error: no match of right hand side value {point,10,45}
dispatchとして使用されます.
area({rectangle, Width, Ht}) -> Width * Ht;
area({circle, R}) -> 3.14159 * R * R.
Guards
guardsはrubyのcaseに似ていて、違いは方法を定義するために使用することができて、このようにして、1つの方法は異なる部分に分解されて、Erlangの方法をもっと短くします.
max(X, Y) when X > Y -> X;
max(X, Y) Y.
filter:
filter(P, [H|T]) ->
case P(H) of
true -> [H|filter(P, T)];
false -> filter(P, T) end;
filter(P, []) ->
[].
より短いfilter:
filter(P, [H|T]) -> filter1(P(H), H, P, T);
filter(P, []) -> [].
filter1(true, H, P, T) -> [H|filter(P, T)];
filter1(false, H, P, T) -> filter(P, T)
再帰
sum([], N) -> N;
sum([H|T], N) -> sum(T, H+N).
Erlangでは再帰が多く用いられている.再帰には2つの利点があり,1つは問題を分解し,問題を容易に処理できるようにすることである.1つは、再帰的に表示できるメンテナンス状態であり、付与を回避し、immutableを維持し、メンテナンスを容易にし、同時実行を容易にすることです.
小結
Erlangは非常にユニークで、これらのユニークな点はプログラマーが問題を分解し、Erlangのコードをよりよく維持するのに役立ちます.