Erlang. Операции if/then/else/case.

Операции if/then/else

Напишем несложную функцию, находящую максимальный элемент массива:

-module(test).
-export([list_max/1]).

list_max([]) -> [];
list_max([Head | Rest]) -> list_max(Head, Rest).
list_max(Head, []) -> Head;
list_max(Head, [NewHead | List]) ->
	if 
		Head > NewHead -> list_max(Head, List);	
  		true -> list_max(NewHead, List)
  	end.
1> c(test.erl).
{ok,test}
2> test:list_max([1,2,3,4,5]).
5

Первое, на что стоит обратить – аналог оператора else отсутствует, вместо этого true -> “что-то там”. В остальном более-менее привычно, за исключением того что все время приходится мыслить “рекурсивно”. На самом деле, операторы if/then/else/case изначально отсутствовали в языке, все это можно делать при помощи pattern matching, что кстати говоря и считается, более правильным. Вот, тот же пример, иллюстрирующий этот подход:

-module(test).
-export([list_max/1]).

list_max([]) -> [];
list_max([Head | Rest]) -> list_max(Rest, Head).
list_max([], MaxValue) -> MaxValue;
list_max([Head | Rest], MaxValue) when Head > MaxValue -> 
  list_max(Rest, Head);
list_max([Head | Rest], MaxValue) -> list_max(Rest, MaxValue).

Оператор case

А вот пример того как работает case в erlang:

-module(days).
-export([day_of_week/1]).

day_of_week(Day) ->
  case Day of
  	0 -> monday;
  	1 -> tuesday;
  	2 -> wednesday;
  	3 -> thursday;
  	4 -> friday;
  	5 -> saturday;
  	6 -> sunday
  end.

1> c(days.erl).        
{ok,days}
2> days:day_of_week(1).
tuesday

Site Footer

Sliding Sidebar

About Me

About Me

For whom this blog for?

For those who are interested in modern Internet technologies, IT business, startups, management, quality control, personal effectiveness, motivation. Here I write about what is interesting, about problems I faced and solutions I found. I hope it will be interesting to you either.

What motivates me to write?

The desire to improve, to study deeper topics that interest me. Find people with similar problems and tasks, together look for ways out and solutions.

Feel free to contact if you have anything to say to me

Old Flash site with my artistic works and misuc.