Az ERLANG programozási nyelv

Példaprogramok

Nevezetes gráfalgoritmusok

A programcsomag nevezetes gráfalgoritmusokat valósít meg Erlangban a digraph modul használatával, funkcionális szemléletmódot alkalmazva.

Tartalmazott algoritmusok:

Forrás

Szerkezeti felépítés

A csomag 3 modult tartalmaz:

Használat és példakódok

Mélységi bejárás futtatása az 1. példagráfon:

algorithm:depthWalk(sample:graph1(), 1).
[1,4,7,6,8,3,2,5]

Szélességi bejárás futtatása az 1. példagráfon:

algorithm:breadthWalk(sample:graph1(), 1).
[1,4,3,2,7,6,5,8]

Dijkstra algoritmus futtatása a 2. példagráfon:

algorithm:dijkstra(sample:graph2(), 1).
[{vertex_info,6,10,3},
{vertex_info,4,5,2},
{vertex_info,1,0,root},
{vertex_info,2,3,1},
{vertex_info,3,6,4},
{vertex_info,5,12,3}]

Dijkstra algoritmus futtatása a 4. példagráfon (negatív él):

algorithm:dijkstra(sample:graph4(), 1).
false

Prim algoritmus futtatása a 3. példagráfon:

algorithm:prim(sample:graph3(), 1).
[{vertex_info,6,4,3},
{vertex_info,4,2,2},
{vertex_info,1,0,root},
{vertex_info,2,3,1},
{vertex_info,3,1,4},
{vertex_info,5,3,6}]

Prim algoritmus futtatása a 2. példagráfon (irányított él):

algorithm:prim(sample:graph2(), 1).
false

Bellman-Ford algoritmus futtatása a 4. példagráfon:

algorithm:bellman_ford(sample:graph4(), 5).
[{vertex_info,4,-2,1},
{vertex_info,1,2,2},
{vertex_info,2,4,3},
{vertex_info,3,7,5},
{vertex_info,5,0,root}]

Bellman-Ford algoritmus futtatása az 5. példagráfon (negatív kör):

algorithm:bellman_ford(sample:graph5(), 5).
false

Szerzői információk

Szerző neve: Cserép Máté
Készítés éve: 2012

Adatbáziskezelés

A program alapvető adatbáziskezelési műveletek mutatja be

Forrás

Használat és példakódok

Kezdeti inicializáció:

database_demo:init().
{atomic,ok}

Új sor beszúrása:

database_demo:insert_into_shop("apple", 100, 2.5).
{atomic,ok}

Shop tábla rekordjainak listázása:

database_demo:select_all_from_shop().
{atomic,[{shop,"pear",200,3.6},{shop,"apple",100,2.5}]}

Vetítés a shop item és quantity oszlopaira:

database_demo:projection().
{atomic,[{"pear",200},{"apple",100}]}

Feltételes lekérdezés, where záradék megadása:

database_demo:where_clause().
{atomic,["pear","apple"]}

Összetett lekérdezés a táblák összekapcsolásával:

database_demo:join().
{atomic,[]}

Rekord törlése kulcs érték alapján:

database_demo:remove_shop_item("apple").
{atomic,ok}

Szerzői információk

Szerző neve: Gerstweiler Anikó Éva
Készítés éve: 2012

Általános párhuzamosító alkalmazás

Az alkalmazások implementálása során lehetnek olyan esetek, mikor sokáig tartó taskokat (feladatokat megvalósító programokat/ programrészleteket) kell N-szer lefuttatni. Például: állítsunk össze és küldjünk ki egy emailt 100-szor. Ha feltesszük, hogy a taskok egymástól függetlenek és párhuzamosíthatóak, akkor az alkalmazásunk futási ideje nagyban csökkenthető, ha a taskok párhuzamosan vannak végrehajtva.

A feladat: Egy olyan általános algoritmus konstruálása, mely képes:

Forrás

Használat

1>c(pp1).<br /> 2>pp1:run_pp(fun()->io:format("Worker process (~p)~n",[self()]), do_some_task end,10).
Worker process (<0.63.0>)
Worker process (<0.64.0>)
Worker process (<0.65.0>)
Worker process (<0.66.0>)
Worker process (<0.67.0>)
Worker process (<0.68.0>)
Worker process (<0.69.0>)
Worker process (<0.70.0>)
Worker process (<0.71.0>)
Worker process (<0.72.0>)
[do_some_task,do_some_task,do_some_task,do_some_task,
do_some_task,do_some_task,do_some_task,do_some_task,
do_some_task,do_some_task]

Szerzői információk

Szerző neve: Fördős Viktória
Készítés éve: 2013

Hello NIF

Egy nagyon egyszerű, demó jellegű NIF-es könyvtár megírásán keresztül kerül bemutatásra a technológia alkalmazásához szükséges legfontosabb tudnivalók.

A feladat és az azt megoldó program leírása és használata az Elosztott programozás Erlangban című szekciójának NIF alszekciója alatt található meg.

Forrás

Szerzői információk

Szerző neve: Fördős Viktória
Készítés éve: 2013

Fibonacci

A modul elsődlegesen azt a tévhitet kívánja cáfolni, miszerint a rekurzióval készített alkalmazások mindig gyorsak. Ehhez a Fibonacci számok kiszámítását veszi példának: a definíció szerinti rekurzióval implementált megoldást hasonlítjuk össze annak egy optimalizált verziójával. A modulban a fibonacci/1 függvényt ellenőrző EUnit tesztek is implementálásra kerültek.

Forrás

A két implementáció összehasonlítása

Erlangban a timer modul tc függvényével mérhetjük le az egyes függvények futási idejét mikromásodpercben. Egy kimenet:

7> timer:tc(fibonacci, quick_fibonacci, [50]).
{4,12586269025}
< 1 sec
8> timer:tc(fibonacci, fibonacci, [50]).
{999953922,12586269025}
< 1000 sec

Szerzői információk

Szerző neve: Fördős Viktória
Készítés éve: 2013

Quicksort

A modul a funkcionális nyelvi elemek (halmazkifejezések, rekurzió, mintaillesztés) felhasználásával adja meg a quicksort algoritmus egy lehetséges implementációját, melynek tömörsége és kifejezőereje mutatja meg igazán az Erlangban írható alkalmazások erejét és eleganciáját.

Forrás

Használat

1> c(quicksort).
{ok,quicksort}
2> quicksort:sort([1,2,100,-1,alma]).
[-1,1,2,100,alma]

Szerzői információk

Szerző neve: Fördős Viktória
Készítés éve: 2013

Karakter statisztika

Egy program, amely példát ad a kulcs-érték párok használatára.

A feladat egy karakter statisztika készítő program, amely megvalósításra került proplist és map adattípus használatával is.

Forrás

Használat

kar_stat_prop:karakter_statisztika("Example").
kar_stat_prop:karakter_szama("p","Example").
kar_stat_map:karakter_statisztika("Example").
kar_stat_map:karakter_szama("p","Example").

Szerzői információk

Szerző neve: Oláh Barbara
Készítés éve: 2014

Könyvtár

Egy egyszerű program az eseménykezelés szemléltetésére.

A feladat egy leegyszerűsített könyvtárműködést megvalósító program készítése. A megoldás során a gen_event viselkedésmintát használtam, továbbá a könyvek tárolására egy Mnesia adatbázist hoztam létre.

Forrás

Használat (példa)

{ok, Pid}=konyvtar:start([adatbazis]).
konyvtar:uj_konyv(Pid, {'Szerzo', 'Cim', 10}).
konyvtar:listaz_osszes(Pid).
konyvtar:listaz_kolcsonozheto(Pid).
konyvtar:listaz_kolcsonzott(Pid).
konyvtar:kolcsonoz(Pid, 'Szerzo', 'Cim', 2).
konyvtar:visszahoz(Pid, 'Szerzo', 'Cim', 1).

Szerzői információk

Szerző neve: Páter-Részeg Attila
Készítés éve: 2014

További példaprogramok

Hasznos példák angol nyelvű leírással a nyelv hivatalos oldalán találhatók.