Подготовил:
Яковлев Владислав
Тел. 8 917 807 50 07
Иногда Erlang бывает изначально установлен на ОС, чтобы проверить, присутствует ли он у вас, запустите командную строку и введите erl :
Если на вашем компьютере установлен Erlang, то вы увидите эту запись, в противном случае вам будет необходимо установить его скачав с официального сайта: http://www.erlang.org.
Для более удобной работы можно скачать и установить Eclipse: http://www.eclipse.org/home/index.php.
Для возможности работы с Erlang в Eclipse необходимо скачать и установить Java SE http://www.oracle.com/technetwork/java/javase/downloads/index.html.
Подождите некоторое время до появления списка установки и нажмите Next, после завершите установку нажав Finish.
мы набираем 2 + 2, затем точку и нажимаем Ввод. Многие начинающие изучать Erlang забывают набрать точку в конце выражения, но в этом случае оболочка не сможет определить, что выражение закончено, и результат не будет выведен.
Теперь оболочка вычисляет выражение и выводит результат (4, в нашем случае).
После этого оболочка выводит приглашение в виде 2>. Где, 2 — это номер команды, который увеличивается с каждой выполненной командой.
Как и во многих языках, арифметические выражения Erlang следуют обычным правилам для арифметических выражений, например, 1 + 2 * 3 будет вычислено как 1 + (2 * 3).
Целые числа могут иметь произвольный размер и нет необходимости беспокоиться об арифметических переполнениях. Проверим это на практике:
1> 123456789 * 123456789 * 123456789 * 123456789.
232305722798259244150093798251441
Кроме этого целые можно вводить в различных системах счисления, используя следующую форму:
1> 10#10.
10
2> 16#10.
16
3> 2#10.
2
Здесь мы ввели число 10 в десятичной, шестнадцатеричной и двоичной системах.
Для ввода кодов символов можно использовать нотацию, начинающуюся с символа $:
1> $a.
97
2> $%.
37
3> $0.
48
4> $\n.
10
Числа с плавающей точкой можно вводить в следующих форматах:
1> 1.25.
1.25
2> 2.0e-10.
2.0e-10
Имена переменных в Erlang должны начинаться с большой буквы, как в следующем примере:
1> X = 123456789.
123456789
2> X.
123456789
3> X * X * X * X.
232305722798259244150093798251441
В первой строке мы присваиваем значение числа 123456789 переменной X и затем значение выводится оболочкой. После этого мы выводим значение переменной и используем ее в арифметической операции.
Но при этом значение переменной Erlang может быть присвоено только один раз. Продолжая следующий пример:
4> X = 10.
** exception error: no match of right hand side value 10
Что здесь происходит? Строго говоря, оператор = в Erlang не является оператором присваивания, а является оператором сравнения с шаблоном. При этом, если переменной в текущей области видимости еще не присвоено значение, = действует как оператор присваивания, в противном случае = сравнивает значение с шаблоном.
При сравнении с шаблоном сначала вычисляется правая часть выражения, затем она сравнивается с шаблоном в левой части. В последнем примере переменная X является простейшей формой шаблона. В данном случае сравнение с шаблоном будет успешным только в случае, если значение правой части выражения равно 123456789:
5> X = 123456789.
123456789
6> X = 100000000 + 23456789.
123456789
Одноразовое присваивание избавляет разработчика от огромного класса ошибок связанных с неверным значением переменной, которая в противном случае могла бы быть изменена где-то между первым присваиванием и выражением, в котором она используется. Плюс к этому, такое поведение согласовывается с математической нотацией, где невозможна формула вида X = X + 1.
В Erlang атомы используются для представления глобальных нечисловых констант. При сравнении с другими языками можно представить атомы, как элементы в перечисляемом типе данных. Значением атома является сам атом и единственная операция над атомами — это сравнение.
Атомы должны начинаться с маленькой буквы (как мы уже рассмотрели выше, переменные должны начинаться с большой буквы, так что они не пересекаются с атомами), за которой могут следовать буквы, цифры, @ и _ (точка тоже может использоваться в атомах, хотя это является не поддерживаемым разработчиками расширением языка). При использовании одинарных кавычек (') для атома могут использоваться практически любые символы. Примеры атомов:
1> hello.
hello
2> 'Hello, World!'.
'Hello, World!'
3> '1
3> 2
3> 3'.
'1\n2\n3'
Хотя Erlang не имеет отдельного булевского типа, по соглашению для этого используются атомы true и failse:
1> 1 > 2.
false
2> a < z.
true
3> is_boolean(1 > 2).
true
4> is_boolean(1 + 2).
false
Заметьте, что во второй строке мы сравнили два атома, при сравнении которых используется лексикографический порядок. Начиная с третьей строки, мы применили встроенную функцию (Built-in function, BIF) is_boolean, которая возвращает true, или false в зависимости от типа аргумента.
Кортеж — это составной тип данных, который используется для хранения связанных элементов в виде единого набора. Кортежи создаются с использованием фигурных скобок и их элементы разделяются запятыми. В качестве элементов кортежа могут выступать любые типы данных Erlang, например:
1> {1, 2}.
{1,2}
2> {1, 1.5, ok}.
{1,1.5,ok}
3> {ok, {5, 6}}.
{ok,{5,6}}
По соглашению, если первый элемент кортежа атом, его называют меткой, хотя это никак не отличает такой кортеж от других кортежей. С использованием таких меток можно создавать собственные типы данных, например:
1> {person, 'Joe', 'Armstrong'}.
{person,'Joe','Armstrong'}
2> {point, 10, 20}.
{point,10,20}
Такие метки упрощают извлечение информации из кортежа с использованием операции сравнения с шаблоном:
1> {point, X, Y} = {point, 10, 20}.
{point,10,20}
2> X.
10
3> Y.
20
4> {point, X, _, _} = {point, 10, 20, 30}.
{point,10,20,30}
5> X.
10
6> {person, Name} = {point, 20, 30}.
** exception error: no match of right hand side value {point,20,30}
Здесь {point, X, Y} — это более сложный шаблон, чем тот, что мы использовали выше, присваивающий переменным X и Y значения 10 и 20 соответственно. В строке 4 мы использовали анонимную переменную (_), которой не присваивается значение и ее можно несколько раз использовать в шаблоне. В строке 6, при попытке использования шаблона {person, Name}, мы получили ошибку, так как шаблон не совпадает с кортежем {point, 20, 30} в правой части выражения.
Кроме этого, с использованием встроенных функций есть возможность работать с отдельными элементами кортежей, например, получать элементы по индексу (начиная с 1):
1> element(2, {100, {1, 2, 3}, ok}).
{1,2,3}
Списки как и кортежи — это составной тип данных, который может содержать любые типы данных Erlang, но в отличие от кортежей списки обрабатываются совсем другим способом и служат для хранения данных, количество которых изменяется. Списки создаются с использованием квадратных скобок, и их элементы разделяются запятыми, например:
1> [1, 2.5, ok, {point, 20, 30}, [1, 2, 3]].
[1,2.5,ok,{point,20,30},[1,2,3]]
Первый элемент списка (в нашем примере — это 1) называется вершиной списка, а оставшиеся элементы — хвостом списка. При обработке списков наиболее эффективная операция — это работа с вершиной списка, которая поддерживается в Erlang следующей конструкцией: [вершина | хвост]. Здесь вершина — это элемент, или набор элементов для добавления, или удаления из списка, а хвост — список для добавления элементов, или список после удаления вершины. Рассмотрим это на примерах:
1> List = [3, 4, 5].
[3,4,5]
2> Range = [1, 2 | List].
[1,2,3,4,5]
3> [Head | Tail] = Range.
[1,2,3,4,5]
4> Head.
1
5> Tail.
[2,3,4,5]
Здесь мы создали список List, затем добавили в качестве его вершины два элемента, сформировав новый список Range. После этого мы отделили один элемент из вершины списка, сохранив его как Head.
Строго говоря, в Erlang нет отдельного типа данных для строк, строки реализованы просто как списки целых чисел. Для более удобной работы со строками их можно создавать с помощью двойных кавычек, как в этом примере:
1> "Hello, World!".
"Hello, World!"
Из следующих примеров можно увидеть, что строки и списки целых — это одно и тоже:
1> [$h, $e, $l, $l, $o] =:= "hello".
true
2> [$h, $e, $l, $l, $o].
"hello"
Здесь =:= сравнивает два элемента.
Создание модуля в Eclipse
Создадим проект эрланга
Теперь создадим модуль