Erlang. Функции. Модули.

Функции

Понятно что это такое, понятно для чего они используются. В erlang функции это все. Они вызываются, передаются в качестве аргументов, создаются другими функциями. Давайте определим, для примера, бесполезную функцию считающую произведение двух чисел:

mul(A, B) -> A * B.

В консоли такой синтаксис работать не будет, но можно изощрться создать через лямбда-функцию:

1> F = fun(A, B) -> A * B.
2> F(2, 3).
6

Классический пример факториала:

factorial(0) -> 1;
factorial(N) ->
    N * factorial(N-1).

Как видите, сопоставление используется для аргументов функций, и при том очень широко:

calc({multiply, A, B}) -> 
    A * B;
calc({divide, A, B}) -> 
    A / B.

В этом примере можно видеть, как в зависимости от значения константы в кортеже, выполняются разные типы вычислений.

Модули

Код нужно структурировать и организовывать, чтобы не потеряться в хаосе функций, для этого используются модули, — отдельные файлы содержащие своего рода «публичные» и «приватные» функции:

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

calc({multiply, A, B}) -> 
    A * B;
calc({divide, A, B}) -> 
    A / B.

Вначале модуля можно видеть директивы module, export. Если первый определяет имя модуля, который должен совпадать с именем файла, то второй указывает какие функции могут быть использованы снаружи модуля. Синтаксис calc/1 означает что экспортируется ф-ция с одним аргументом. Директива import означает что функции другого модуля должны быть доступны. Модули, также, должны быть скомпилированы перед использованием. Скомпилированный модуль имеет разрешение .beam. Компилируется модуль функцией c():

1> c(test.erl).
{ok,test}

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.