Az ERLANG programozási nyelv

Nyelvi elemek

Jelkészlet

Erlang 4.8/OTP R5A óta a nyelvben felhasználható jelek halmaza a teljes ISO-8859-1 (Latin-1) karakterkészlet. Ezt a következőképpen kell érteni:

Azonosítók, literálok

Számok

Számokat a következő formában írhatunk:

123 -34567 12.345 -27.45e-05

Az integerek pontossága nem rögzített, viszont legalább a 24-bites pontosság megkövetelt.

A $<Char> jelölés a Char ASCII értékét tartalmazza, pl. $A = 65. A tízestől eltérő számrendszerbeli számokat <Base>#<Value> alakban írjuk, pl. 16#ffff = 65535.

Atomok

Az atomok névvel ellátott konstansok. Pl. a hetfo,kedd,... atomokat használhatnánk a hét napjainak reprezentálására egy naptárral foglalkozó programban. Használatuk elsősorban a program érhetőségének javítása szempontjából javasolt. Példák atomokra:

szerda aposztrof_nelkuli_atomok_nem_tartalmazhatnak_szokozt 'szokozokkel ellatott atom'

Az atom kötelezően kisbetűvel kezdődik, és alfanumerikus karakterrel végződik, különben aposztrófok közé kell tenni.

Sorok (Tuple)

Kapcsos zárójelek között vesszőkkel elválasztva felsorolt termek sort (tuple) alkotnak. A sor rögzített számú elem tárolására szolgál. Hasonlít a C struct ill. a Pascal record típusához.

Az {E1, E2, ... ,En}, ahol (n>=0), sor hossza n. A sorban előforduló termeket elemeknek (elements) nevezzük.

Példák sorokra:

{a, 12, ’hello’} {1, 2, {3, 4}, {a, {b, c}}} {}

Lista

Szögletes zárójelek között vesszőkkel elválasztva felsorolt termek listát (list) alkotnak. A lista változó számú elem tárolására szolgál.

Az [E1, E2, ... ,En],ahol (n>=0), lista hossza n.

Példák listákra:

[1, abc, [12]] [] [a,b,c] "abcd"

A "..." jelölés, amit sztringnek hívunk - egy „szintaktikus cukor” -, jelölés a karakterlista elemeinek felsorolására. Vagyis “abc” a következő listát jelöli: [97,98,99]

A lista feje (head) és farka (tail) fogalmakat a Prolog nyelvhez hasonlóan definiáltak. A lista első eleme a lista feje, a többi elemből álló lista pedig a farka.

A [E1,E2,E3,…,En|Valtozo], ahol n>=1, jelöli azon listát, melynek első n eleme E1,E2,E3, …, En és a maradékra a Valtozo változóval hivatkozhatunk.

Vegyük észre, hogy a ‘|’ jelet követő termnek nem kell listának lenni, ez tetszőleges érvényes ERLANG term lehet. Azon listákat, melyek utolsó farka a [] term, jólformált listáknak nevezzük. Az ERLANG programok nagy többsége jólformált listákkal dolgozik.

Mintaillesztés

A minták struktúrája megegyezik a termekével, annyi eltéréssel, hogy változókat is tartalmazhatnak. A változók kötelezően nagybetűvel kezdődnek.

Példák mintákra:

{A, a, 12, [12, 34| {a}]} {A, B, 23} {x, {X_1}, 12, A_macskam_kora} []

A fentiekben A, B, X_1 és A_macskam_kora változók.

A mintaillesztés mechanizmusa során a változókhoz értékek rendelődnek hozzá. A változó, mely értéket kap, kötötté válik, előtte szabad változónak nevezzük. Az értékadás folyamatát lekötésnek nevezzük. Lekötést követően az értéke többé nem változhat. Az ilyen változókat egyszer leköthetőnek nevezzük. Ez természetesen ellentétben áll az imperatív nyelvek destruktív értékadás modelljével (Sokan úgy gondolják, hogy a destruktív értékadás nem világos kódot és alattomos hibákat eredményez.).

A minta és a term illeszkednek, ha strukturálisan izomorfak és ha a mintában egy pozíción atomi adattípus található, ugyanolyan atomi adattípus van a megfelelő term ugyanazon pozícióján is. Ha ugyanaz a változó többször szerepel a mintában, minden elemnek, mely a term megfelelő pozícióin szerepel, azonosnak kell lennie.

Mintaillesztés történik:

Minta = Kifejezés

A Minta=Kifejezés utasítás során a Kifejezés kiértékelődik és az eredmény és a Minta illesztésre kerülnek. Ha az illesztés sikeres, a Mintában szereplő változók lekötődnek.

Példák:

{A, B} = {12, alma} %illesztés sikeres: A->12 B-> alma {C, [Head | Tail]} = {{222, fiu}, [a,b,c]} %illesztés sikeres: C->{222, fiu} , Head->a, Tail->[b,c] [{szemely, Nev, Kor, _}|T] = [{szemely, feri, 22, fiu}, {szemely, zsu, 19, lany}, ...] %illesztés sikeres T-> [{szemely,zsu,19,lany}, …]}, Nev->feri, Kor->22

Az utolsó példában szerepel az anonim változó '_'. Anonim változót használunk, ha a szintaxis megkövetel egy változót, de annak értéke érdektelen.

Ha egy változó egy mintában többször szerepel, az illesztés csak akkor lesz sikeres, ha a változóra vonatkozó összes illesztés ugyanazon értékkel történik. Például, {A, xyz, A} = {123, xyz, 123} sikeres lesz, a 123-at kap értékül. Ezzel szemben {A, xyz, A} = {123, xyz, abc} nem sikerül, hiszen nem lehet egyidejűleg a 123 és abc értékeket is hozzárendelni az A-hoz.

Az '=' infix jobbasszociatív operátor. Az Lhs = Rhs értéke Rhs.

Mintaillesztés függvényhíváskor

Vizsgáljuk a következő ERLANG programot:

-module(dates). -export([classify_day/1]). classify_day(Saturday) -> weekEnd; classify_day(Sunday) -> weekEnd; classify_day(_) -> weekDay.

Függvényhíváskor a függvény aktuális paraméterei és függvénydefinícióban szereplő minták kerülnek illesztésre. Ha az illesztés sikeres, a ‘->’ jelet követő utasítások értékelődnek ki, vagyis:

>dates:classify_day(saturday). weekEnd >dates:classify_day(friday). weekDay

A függvényhívás sikertelen, ha az aktuális paramétereket egy ághoz sem lehet illeszteni, ez kivétel kiváltását eredményezi.

Ha egy ág kiválaszódik, a fejlécében szereplő mintabeli változók mindegyike lekötődik.

Megjegyzések

ERLANG-ban a megjegyzések % jellel kezdődnek és a sor végéig tartanak.
Használhatunk a Java-hoz hasonló dokumentációs megjegyzéseket. Ennek generálását az edoc alkalmazás végzi. Részletes leírás: a nyelv hivatalos honlapján.

Formája "%% @tag value", például:

%% @author I. J %% @copyright 2007 I. J. %% @version 1.0.0 %% @title Welcome to the `frob' application! %% @doc `frob' is a highly advanced frobnicator with low latency,