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

Strings (строки)

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

Цифровое представление символов можно получить добавив “$” перед символом:

1> $1.
49
2> $1+1.
50
3> $a.
97
4> $a+1.
98

Вот, что представляют из себя строки:

1> "hello".
"hello"
2> "HELLO".
"HELLO"
3> [$H,$e,$l,$l,$o].
"Hello"
4> [$H,$e,108,$l,$n+1].
"Hello"

Обработка списков

Как уже упоминалось разница между кортежами и списками, в первую очередь, в том как они обрабатываются. Кортежи можно разбирать только поэлементно, с то время как списки можно разбивать на списки с “головой” и “хвостом”, пока лист не будет пуст. Это очень популярная в эрланге операция и является чем-то типа аналога цикла.

Например, для списка [1, 2, 3], головой будет являться 1, а хвостом 2, 3. Таким образом все эти списки эквивалентны:

[1, 2, 3] == [1 | [2, 3]] == [1 | [2 | [3]]] == [1 | [2 | [3 | []]]]

Вот еще хороший пример, иллюстрирующий то, как работает оператор “|”

1> [First | Rest] = [1,2,3,4,5].
[1,2,3,4,5]
2> First.
1
3> Rest.
[2,3,4,5]

И еще один, отлично иллюстрирующий идею:

sum([]) -> 0;
sum([Head | Tail]) -> Head + sum(Tail).

sum([2,3,4] = 2 + sum([3,4])
sum([2,3,4] = 2 + sum([3,4]) = 5 + sum([4]) = 9

Функции для работы со списками

1> lists:max([1,2,5,8,4]).
8
2> lists:sort([2,4,1,3,5]).
[1,2,3,4,5]
3> lists:split(2, [1,2,3,4,5]).
{[1,2],[3,4,5]}
4> lists:sum([1,2,3]).
6
5> lists:zip([1,2,3],[5,6,7]).
[{1,5},{2,6},{3,7}]
6> lists:delete(2,[1,2,3]).
[1,3]
7> lists:last([1,2,4,8,5]).
5
8> lists:member(2,[1,3,2]).
true
9> length([1,2,3]).
3

Для работы со списками также есть два оператора ++ и –. Первый складывает два списка, элементы второго списка добавляются в конец первого, а второй извлекает из первого списка элементы переданные во втором. Проще увидеть это на примере:

1> [1,2,3] -- [2,3].
[1]
2> [1,2,3] -- [3,1].
[2]
3> [1,2,3] ++ [3,1].
[1,2,3,3,1]
4> [1,2,3] ++ [1,3,1].
[1,2,3,1,3,1]

Comments

comments

Leave a reply:

Site Footer

Sliding Sidebar

About Me

About Me

Для кого этот блог?

Для тех кого интересуют современные интернет технологи, IT бизнес, стартапы, менеджмент, контроль качества, личная эффективность, мотивация. Здесь я буду писать о том, что в первую очередь будет интересно мне, о проблемах и решениях. О том что пригодилось мне, и возможно будет интересно Вам.

Что заставило меня создать его?

Желание совершенствоваться. Достигать успеха. Находить людей со схожими проблемами и задачами, вместе искать выходы и решения.

Немного о себе.

Мой первый серьезный опыт в IT это работа над desktop приложениями в компании «Эксперт-Софт». У истоков её стояли несколько амбициозных и талантливых молодых людей, с огнем в глазах и желанием работать «как майкрософт». То чем мы там занимались вполне могли бы сегодня назвать «стартапом». Рук было откровенно мало, поэтому приходилось заниматься всем: кодированием на Delphi, написанием скриптов на VBA, дизайном, вёрсткой и поддержкой вебсайта, работой над рекламной полиграфией, проектированием интерфейсов и БД. Работы было много, но запал был велик, команда очень разношерстная, гармонично дополняя друг-друга в решении нетривиальных задач. Благодаря тому что пришлось попробовать многое, постепенно вырисовалось понимание того чем хочется заниматься, и как. Софтверным программированием я был сыт по горло. Массы проблем десктопного софта в вебе просто не было, по определению. Зато был четкий фокус на дизайне, юзабилити, скорости. Поэтому когда пришла пора уходить из «Эксперт-Софт», я без всякого сожаления стал искать работу как разработчик для web. Поскольку городишко у нас не очень большой, выбор был практически предопределен. Так я стал работать в «Оникс-Системз», где и продолжаю работать поныне. За время работы в компании я как разработчик принимал участие в работе над несколькими десятками проектов. Несколько десятков проектов было сделано мною как фрилансером. Самым большим проектом в котором я сыграл роль менеджера, считаю свою семью. Также довольно большой проект мы сейчас поднимаем с командой разработчиков (на данный момент команда состоит из четырех php разработчиков, одного flex кодера и тестировщика). Отсюда, большой интерес к современным практикам и методологиям, разным подходам в управлении командой, повышению эффективности и качества работы. По мере сил, вдохновения и свободного времени, я буду писать об этом.

Если у Вас возникли какие-то вопросы ко мне лично, буду рад если Вы свяжетесь со мной:

e-mail:
skype: denis.sheremetov
Старый сайт, с музычкой и флешом

Прочая онлайновая деятельность: