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}

Comments

comments


Bookmark and Share