Руководство по установке и работе в Erlang и Eclipse

C:\Users\Vladka\Desktop\images.png

C:\Users\Vladka\Desktop\скачанные файлы.png

        Подготовил:

        Яковлев Владислав

        Тел. 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.

Шаг второй: Работа в Erlang и Eclipse

мы набираем 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

Создадим проект эрланга

        Теперь создадим модуль