Erlang. Упражнения.

В рамках программы изучения Erlang я делаю упражнения из книги «Erlang programming» Франческо Чезарини и Саймона Томпсона. Оказалось что это на редкость полезное занятие, – теперь синтаксис не кажется таким уж страшным, и решение хоть и простых, но практических задач, придает уверенности в себе. Ниже я приведу условия задачи (уж простите, без перевода) и свой вариант решения (зачастую не оптимальный). Exercise 3-1: Evaluating Expressions Write a function sum/1which, given a positive integer N, will return the sum of all the

Continue Reading

Erlang. Операции if/then/else/case.

Операции if/then/else Напишем несложную функцию, находящую максимальный элемент массива: -module(test). -export([list_max/1]). list_max([]) -> []; list_max([Head | Rest]) -> list_max(Head, Rest). list_max(Head, []) -> Head; list_max(Head, [NewHead | List]) -> if Head > NewHead -> list_max(Head, List); true -> list_max(NewHead, List) end. 1> c(test.erl). {ok,test} 2> test:list_max([1,2,3,4,5]). 5 Первое, на что стоит обратить – аналог оператора else отсутствует, вместо этого true -> “что-то там”. В остальном более-менее привычно, за исключением того что все время приходится мыслить “рекурсивно”. На самом деле, операторы

Continue Reading

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). Как видите, сопоставление используется для аргументов

Continue Reading

Сопоставление.

Сопоставление (pattern matching) Сопоставление или pattern matching, это еще один способ присвоения, извлечения значений из списков или кортежей. Работает это так – сравнивается две переменные, если они не эквивалентны по типу или по значению возникнет исключение (ошибка). Если они равны, но отличаются только в переменных, то переменным в левой части выражения будет присвоено соответстветствующие значения справа. Проще всего это тоже пояснить на примере. Напомню, переменные всегда начинаются с заглавной: 1> {A, B} = {111, 222}. {111,222} 2> A. 111 3>

Continue Reading

Erlang. Строки. Работа со списками.

Strings (строки) Символы в erlang представляются целыми числами, а строки – списками числовых значений ASCII символов. Это связано с тем что erlang пришел из телекома, а там, работа со строками это почти экзотика. Поскольку символы это ASCII, то в 32х разрядной версии для сравнения символа в памяти используется два байта, а в x64 – четыре, что не эффективно, но, насколько я понимаю, эта проблема решается в новых версиях. Разница между атомами, рассмотренными прежде, и строками в том что атомы можно

Continue Reading

Erlang. Tuples, Lists.

Tuples (кортежи) Кортежи встречаются не во многих языках. Это своего рода контейнеры, которые могут содержать другие типы. Их часто сравнивают со структурами в C, только поля кортежа не имею имени. Несколько примеров: {1,2,3}. {a, b,c}. {}. {true, false}. {{1, 2, 3}, {one, two, three}, {"One", "Two", "Three"}}}. И несколько функций, для работы с кортежами: 1> tuple_size({one, {111, 222}, true, false, 3.1415}). 5 2> element(2, {one, {111, 222}, true, false, 3.1415}). {111,222} 3> setelement(2, {one, {111, 222}, true, false, 3.1415}, result).

Continue Reading

Erlang. Операторы. Atoms, Integers, Booleans.

Математические операторы Тип Описание Тип данных + Сложение (addition) Integer | Float – Вычитание (substraction) Integer | Float * Умножение (multiplication) Integer | Float / Деление с плавающей запятой (floating point division) Integer | Float div Деление нацело (integer division) Integer rem Остаток от деления (integer remainder) Integer Примеры использования математических операторов в консоли erlang: 1> 1 + -1. 0 2> 2/3. 0.6666666666666666 3> 3 div 2. 1 4> 3 rem 2. 1 Атомы (константы) Атомы это строковые константы типа:

Continue Reading

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.