Erlang термины
Переменная - неизменный блок памяти, который хранит что-либо. Однажды присвоенное значение (например: MyVar = 12) изменить нельзя. Названия начинаются с заглавной буквы. Переменные могут иметь два состояния: свободное и связанное(например: MyVar = 12).
Сопоставление по образцу -
= сначала вычисляется правая часть выражения, затем левая. В случае если получается false, выбрасывается ошибка. Если true, по разному, смотри переменные, Клаузы, Кортежи и т.д.
Атомы - Не-числовые константы. Начинаются с прописной буквы(в виде реги: ^[a-z]+_@\.) пр:
year,
month ip@site.ru и т.д., если не заключены в одинарные кавычки. В одинарных кавычках могут начинаться с заглавной буквы.
'Ip@_sho.t' и т.д. Равны сами себе.
Кортеж - { person: man }, или { type: { name, family }, 10 }
объединяют
ключ: значение либо
значение, значение, может быть любая вложенность.
L = {line, 10, 45}.
{line, A, B} = L.
% теперь А -> 10, B -> 45
% после процента в Erlang идет комментарий
Списки - В переводе не нуждаются. Элементы разделяются запятой
A = [10, 20, pre, {line, 10, 45}].
% 10
% 20
% pre
% {line, 10, 45}
Список можно разделить на Голову и Хвост во время присвоения переменным. Разделитель - вертикальная черта |
List = [10, 20, pre, {line, 10, 45}].
[X, Y | Any] = List.
% X->10
% Y->20
% Any->pre, {line, 10, 45}
Строки - Списки цифр.
Клауза - clause - условие, формула. Сопоставление аргументов функции. Сравни условиям if в других языках программирования. Если условие совпадает, то выполняем код, если нет ищем следующее соответсвие...
Клаузы разделяются точкой с запятой, в конце всех клауз ставится точка.
func({point, X, Y}) -> X + Y;
%первая клауза, соответствие будет func({point, 10, 30})
func({fio, F}) -> F.
%вторая клауза, соответствие будет func({fio, 'Wachovski'})
Модули - Блоки кода. Сохраняются в файлы .erl, которые затем компилируются в файлы .beam (Bogdan’s Erlang Abstract Machine)
% modulename.erl, [func/1] - у функции func один аргумент
-module(modulename).
-export([func/1]).
func({point, X, Y}) -> X + Y;
func({fio, F}) -> F.
-export(fn). нужна, чтобы использовать функцию func вне модуля
1> cd("/path_to_erlang").
2> c(modulename).
{ok,modulename}
3> modulename:func({fio, 'Mobidik'}).
'Mobidik'
Арность(en.arity) - количество аргументов передаваемых функции. Одинаково называемые функции с разным количеством элементов - разные функции. Разделяются точкой(.), а не точкой с запятой.
Анонимная функция(en.fun) - функция без имени, может присваиваться переменной или быть переданной как параметр.
Calc = fun({sum,A,B}) -> A + B;
({minus,A,B}) -> A - B
end.
Calc({sum,10,12}).
%22
Calc({minus,10,12}).
%-2
%или
Sum = fun(A,B) -> A + B end.
Sum(2,3).
%5