Аритметични изрази:

> io:format("+1 = ~p~n", [+1]).
+1 = 1
ok
> io:format("-1 = ~p~n", [-1]).
-1 = -1
ok
> io:format("2*3 = ~p~n", [2*3]).
2*3 = 6
ok
>

Делене с плаваща запетая

> io:format("2/3 = ~p~n", [2/3]).
2/3 = 0.6666666666666666
ok
>

Побитово не

> io:format("bnot 1 = ~p~n", [bnot 1]).
bnot 1 = -2
ok
>

Цялочислено деление

> io:format("5 div 3 = ~p~n", [5 div 3]).
5 div 3 = 1
ok
>

Цялочислен остатък от деление

> io:format("5 rem 3 = ~p~n", [5 rem 3]).
5 rem 3 = 2
ok
8>

Побитово и

> io:format("5 band 3 = ~p~n", [5 band 3]).
5 band 3 = 1
ok

Побитово или

> io:format("5 bor 3 = ~p~n", [5 bor 3]).
5 bor 3 = 7
ok

Побитово xor

> io:format("5 bxor 3 = ~p~n", [5 bxor 3]).
5 bxor 3 = 6
ok
>

Аритметично изместване на битове наляво

> io:format("1 bsl 3 = ~p~n", [1 bsl 3]).
1 bsl 3 = 8
ok

Аритметично изместване на битове надясно

> io:format("16 bsr 3 = ~p~n", [16 bsr 3]).
16 bsr 3 = 2
ok

Пазачи:

Защитите са допълнителни клаузи, които могат да влязат в главата на функция, за да направят съвпадението на шаблони по-изразително.

Да започнем с пример

-module(guards).
-compile(export_all).
maximum(A, B) when A>B -> A;
maximum(_A, B) -> B.
sample_run() ->
io:format("1. Maximum among 3 and 7 is ~p~n", [maximum(3,7)]),
ok.

Ще се използва само горното тяло на клаузата за функция maximum( ).

когато пазачът A›B е удовлетворен. Можем да използваме предпазители по този начин, за да имаме условие за функциониране.

В Sample_run() Тестване на максималната функция, написана по-горе, за да се провери дали guard A›B работи правилно или не

Когато използвате предпазители, запетая (,) може да се използва за логика И, а (;) може да се използва за логика ИЛИ.

Набор от условия, разделени със запетаи(,), се нарича предпазен израз или предпазен израз.

Няколко защитни израза могат да бъдат обединени чрез ИЛИ, като се разделят с точка и запетая(;)

Правилата и възможните стойности за оценка на охраната са:

1. Atom true -› Изчислява се като true

2. Всички останали атоми -› Оценяване на false

3. Аритметични изрази

4. Сравнения

5. Булеви изрази

6. Защитни предикати / BIF, които започват с is_, могат да бъдат извикани в защитата

Защитните предикати, които започват с is_, са изброени в онлайн документацията
http://www.erlang.org/doc/reference_manual/expressions.html#id79005

Същата страница също изброява BIF като abs(), node(), length() и т.н., които са разрешени в защитните последователности.

Записи

Дефиницията на запис се състои от името на записа, последвано от имената на полетата на записа. Имената на записи и полета трябва да са атоми. Всяко поле може да получи незадължителна стойност по подразбиране. Ако не е предоставена стойност по подразбиране, се използва undefined.

-record(Name, {Field1 [= Value1],
               ...
               FieldN [= ValueN]}).

-запис(лице, {име, имейл, мобилен}).

Предоставяне на стойности по подразбиране за email, mobile, така че ако email, mobile не са дефинирани, те приемат тези стойности вместо atom undefined

-record(person2, {name, email="[email protected]", mobile="999999999"}).

1. За да заредите горния запис в shell, използвайте файл с разширение .hrl

rr(“записи.hrl”).

2. За да използвате горния запис в други файлове, използвайте

-include(“records.hrl”). близо до главата на .erl файл

3. Използвайте #person{name=”abcd”}. в shell, за да създадете запис от тип person с име=”abcd”. Всички непредоставени стойности ще бъдат „недефинирани“ по подразбиране

4. Можем да използваме rf(person). за да накарате shell да забрави за записващия човек.

5. Записите не са различни типове данни. Записите се съхраняват вътрешно като кортежи.