Математические операторы
| Тип | Описание | Тип данных |
|---|---|---|
| + | Сложение (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
Атомы (константы)
Атомы это строковые константы типа: red, green, blue или enabled, disabled. Всегда должны начинатся с нижнего регистра (маленькой буквы) и могут включать в себя буквы, цифры, символы “@”, “_”, “.”. Например: testUser, test_user, test.user. В принципе для атомов можно использоват любые символы, если заключать их в одинарные кавычки: ‘Monday’, ‘not ready’, ‘node#1\nnode#2’
Integers (целые)
Определение целых работа с ними классическая:
1> 1. 1 2> 2+3. 5 3> 4-7. -3
Booleans
Здесь тоже все более-менее привычно за исключением того что это не отдельный тип а просто обычный атом-константа. Вот несколько примеров, которые иллюстрируют особенности erlang:
1> 1==1. true 2> 1>2. false 3> a is_boolean(true). true 5> is_boolean(2+3). false
| Оператор | Описание |
|---|---|
| and | Возвращает true если оба аргумента по отдельности вернут true |
| andalso | Возвращает false если первый аргумент был false и не проверяет второй аргумент |
| or | Возвращает true если любой аргумент был true |
| orelse | Возвращает true если первый аргумент был true, без проверки второго элемента |
| xor | Возвращает true если один из аргументов true, а другой false |
| not | Возвращает true если аргумент был false, и наоборот |
Привет, ты уже решал какие-то реальные задачи на Erlang?
Давно смотрел в его сторону, почитываю то тут то там, и вот решился покодить и интересно было бы взяться за реальную задачу, может не совсем реальную, но приблеженную к реальности.
Привет. До реальных задач дело еще не дошло. Кривая вхождения уж очень крутая. Эта часть про операторы самая простая, все что пойдет дальше, будет выпадать из привычных рамок императивных языков. Ну к слову, такая мелочь – переменных в языке нет совсем. Только константы.
Атомы это не константы. Это почти тоже самое что symbols в ruby.
Мне показалось что это что-то похожее на константы в php или define в C. Я с руби не так чтобы очень знаком, как впрочем и с эрлангом, но в чем разница между атомами и константами?
В общем случае, это неизменяемые строки. Атомы используются вместо чисел для обозначений, для повышения ясности кода. Единственная операция на атомах (она и самая эффективная) это сравнение. Атомы хранятся как ссылки в несколько байт в независимости от написанной длины атома. В отличие от строк (где сравнение происходит символ за символом), атомы сравниваются за один шаг. И константа в php хранит значение в памяти, атом же не имеет значения, он сам по себе обозначение.
Спасибо за разъяснение. Да, я так себе это и представлял, но с точки зрения языка это всеже константы (хотя и устроены они как цепочка байтов, что конечно быстрее в обработке чем посимвольное стравнение строк).