80 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			80 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | title: Erlang | |||
|  | localeTitle: Erlang | |||
|  | --- | |||
|  | ## Erlang
 | |||
|  | 
 | |||
|  | Erlang - это функциональный язык программирования, разработанный Ericsson для использования в телекоммуникационных приложениях. Поскольку они чувствовали, что для телекоммуникационной системы неприемлемо иметь какое-либо существенное время простоя, Эрланг был построен, среди прочего: | |||
|  | 
 | |||
|  | *   распределенной и отказоустойчивой _(часть неисправного программного обеспечения или аппаратного обеспечения не должна приводить систему к работе)_ | |||
|  | *   _(он может генерировать множество процессов, каждый из которых выполняет небольшую и четко определенную часть работы и изолируется друг от друга, но может общаться через обмен сообщениями)_ | |||
|  | *   с возможностью горячей замены _(код можно поменять местами в системе во время работы, что приведет к высокой доступности и минимальному простому простоя системы)_ | |||
|  | 
 | |||
|  | ### Синтаксис
 | |||
|  | 
 | |||
|  | Эрланг сильно использует **рекурсию** . Поскольку данные в Erlang неизменяемы, использование `while` и `for` циклов (где переменная должно продолжать изменять свое значение) недопустимо. | |||
|  | 
 | |||
|  | Ниже приведен пример рекурсии, показывающий, как функция повторно накладывает первую букву с начала имени и печатает ее, только останавливаясь при обнаружении последней буквы. | |||
|  | 
 | |||
|  | ```erlang | |||
|  | -module(name).  | |||
|  |   | |||
|  |  -export([print_name/1]).  | |||
|  |   | |||
|  |  print_name([RemainingLetter | []]) ->  | |||
|  |   io:format("~c~n", [RemainingLetter]);  | |||
|  |  print_name([FirstLetter | RestOfName]) ->  | |||
|  |   io:format("~c~n", [FirstLetter]),  | |||
|  |   print_name(RestOfName).  | |||
|  | ``` | |||
|  | 
 | |||
|  | Вывод: | |||
|  | ``` | |||
|  | > name:print_name("Mike"). 
 | |||
|  |  M  | |||
|  |  i  | |||
|  |  k  | |||
|  |  e  | |||
|  |  ok  | |||
|  | ``` | |||
|  | 
 | |||
|  | Также большое внимание уделяется **сопоставлению шаблонов** , что часто устраняет необходимость в структуре `if` или `case` . В следующем примере есть два соответствия для конкретных имен, за которыми следует catch-all для любых других имен. | |||
|  | 
 | |||
|  | ```erlang | |||
|  | -module(greeting).  | |||
|  |   | |||
|  |  -export([say_hello/1]).  | |||
|  |   | |||
|  |  say_hello("Mary") ->  | |||
|  |   "Welcome back Mary!";  | |||
|  |  say_hello("Tom") ->  | |||
|  |   "Howdy Tom.";  | |||
|  |  say_hello(Name) ->  | |||
|  |   "Hello " ++ Name ++ ".".  | |||
|  | ``` | |||
|  | 
 | |||
|  | Вывод: | |||
|  | ``` | |||
|  | > greeting:say_hello("Mary"). 
 | |||
|  |  "Welcome back Mary!"  | |||
|  |  > greeting:say_hello("Tom"). 
 | |||
|  |  "Howdy Tom."  | |||
|  |  > greeting:say_hello("Beth"). 
 | |||
|  |  "Hello Beth."  | |||
|  | ``` | |||
|  | 
 | |||
|  | ### Попробуйте
 | |||
|  | 
 | |||
|  | Существуют веб-сайты, на которых вы можете попробовать запустить команды Erlang без необходимости устанавливать что-либо локально, например: | |||
|  | 
 | |||
|  | *   [Попробуй! (практический учебник)](http://www.tryerlang.org/) | |||
|  | *   [TutorialsPoint CodingGround](https://www.tutorialspoint.com/compile_erlang_online.php) | |||
|  | 
 | |||
|  | Если вы хотите установить его на свою (или виртуальную) машину, вы можете найти установочные файлы на [Erlang.org](https://www.erlang.org/downloads) или в [Erlang Solutions](https://www.erlang-solutions.com/resources/download.html) . | |||
|  | 
 | |||
|  | #### Дополнительная информация:
 | |||
|  | 
 | |||
|  | *   [Информация о Эрланге](https://www.erlang.org/about) | |||
|  | *   [Узнай, что у тебя есть Эрланг!](http://learnyousomeerlang.com/) | |||
|  | *   [Порожденный укрытие!](http://spawnedshelter.com/) _(сборник статей, видеороликов и книг для изучения Эрланг)_ | |||
|  | *   [Эрланг (язык программирования)](https://en.wikipedia.org/wiki/Erlang_(programming_language)) |