Операции 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 -> “что-то там”. В остальном более-менее привычно, за исключением того что все время приходится мыслить “рекурсивно”. На самом деле, операторы …
Blog Posts
Функции Понятно что это такое, понятно для чего они используются. В 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). Как видите, сопоставление используется для аргументов …
Сопоставление (pattern matching) Сопоставление или pattern matching, это еще один способ присвоения, извлечения значений из списков или кортежей. Работает это так – сравнивается две переменные, если они не эквивалентны по типу или по значению возникнет исключение (ошибка). Если они равны, но отличаются только в переменных, то переменным в левой части выражения будет присвоено соответстветствующие значения справа. Проще всего это тоже пояснить на примере. Напомню, переменные всегда начинаются с заглавной: 1> {A, B} = {111, 222}. {111,222} 2> A. 111 3> …
Strings (строки) Символы в erlang представляются целыми числами, а строки – списками числовых значений ASCII символов. Это связано с тем что erlang пришел из телекома, а там, работа со строками это почти экзотика. Поскольку символы это ASCII, то в 32х разрядной версии для сравнения символа в памяти используется два байта, а в x64 – четыре, что не эффективно, но, насколько я понимаю, эта проблема решается в новых версиях. Разница между атомами, рассмотренными прежде, и строками в том что атомы можно …
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). …
Математические операторы Тип Описание Тип данных + Сложение (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 Атомы (константы) Атомы это строковые константы типа: …
Мы с командой пишем небольшое мобильное приложение. Было любопытно узнать что неспотря на всю бурность развития мобильных приложений, классических интерфейсных решений очень мало, при чем с планшетами дело обстоит даже хуже чем с телефонами. Поэтому хочу поделиться неплохим набором паттернов пользовательского интерфейса для iOS и Android. Android Android Interaction Design Patterns Android Patterns iOS Inspired UI – mobile patterns Mobile UI Patterns | Recently Added Recent / iOS UI Patterns iPad Landing Pad — an iPad App Gallery
В нескольких последних проектах у нас были довольно жесткие требования по производительности и отказоустойчивости, и как следствие мы усложняли архитектуру, перекладывая часть работы на демоны, оставляя php только роль веб-фронтенда. Для демонов php принципиально не подходит, потому как работа с многопоточностью, всякого рода блокировками и утечками памяти это отдельная головная боль, которую приходится лечить вместо решения конкретной проблемы. Как-то исторически, мы использовали для этого дела питон, но и он не лишен недостатков, особенно в высоко нагруженной среде. Интерес к флексу …
Снимок экрана можно сделать по комбинации клавиш Alt-Shift-G Комбинация клавиш Alt-M запускает встроенную игру «минер» Если вы зальете фотографии на устройство, их можно будет просматривать Если вы читаете новости или проверяете почту через веб, лучше использовать мобильные версии, например m.gmail.com Не забывайте выключать wifi, он значительно быстрее разряжает батарею Отсылайте на свой имейл ваше-имя@free.kindle.com книги и документы и они автоматически попадут вам на читалку в сконвертированном виде после включения wi-fi Если вам нужно искать текст по всей библиотеке, вы просто печатаете этот текст на Home. По клику на найденной книге вы увидите все фрагменты содержащие искомый текст Киндл …