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))
|