See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Erlang (linguaggio) - Wikipedia

Erlang (linguaggio)

Da Wikipedia, l'enciclopedia libera.

Lo Erlang è un linguaggio di programmazione non orientato a contesti specifici ma in grado di lavorare con la programmazione concorrente; può gestire cioè più processi che interferiscono tra loro in esecuzione e su sistemi runtime, vale a dire senza due processi distinti per la compilazione e l'esecuzione ma con un unico processo di modifica ed esecuzione continua.

Fu progettato per gestire applicazioni non-stop, distribuite e stabili. Da quando è uscita una versione open-source nel 1998 è stato adottato da varie compagnie multinazionali come la Nortel e T-Mobile.

Il "sottoinsieme sequenziale di Erlang" è un linguaggio funzionale, a valutazione rigida, non polimorfo e con typing dinamico.

Il suo codice ha il seguente aspetto:

-module(fact).
-export([fac/1]).

fac(0) -> 1;
fac(N) when N > 0 -> N * fac(N-1).

Qui di seguito una implementazione dell'algoritmo di ordinamento veloce 'quicksort'

%% quicksort(List)
%% Sort a list of items
-module(quicksort).
-export([qsort/1]).

qsort([]) -> [];
qsort([Pivot|Rest]) ->
    qsort([ X || X <- Rest, X < Pivot]) ++ [Pivot] ++ qsort([ Y || Y <- Rest, Y >= Pivot]).

L'esempio di cui sopra richiama ricorsivamente la funzione qsort fino a quando non c'è più nulla da ordinare. L'espressione

[ X || X <- Rest, X < Pivot]

può essere letta come un

"Scegli tutte le X per le quali X è un membro di Rest e X è minore di Pivot",

ciò finisce col divenire un modo molto facile per gestire le liste.

Dal momento che è possibile valutare una qualsiasi espressione booleana tra due differenti tipi, il calcolo è diretto, per esempio 1 < a restituirà true.

In ogni caso è anche possibile generalizzare la funzione vista sopra per ottenere un ordinamento diverso da quello canonico, l'ordine crescente. Infatti, passando come argomento una funzione di confronto, il programmatore potrà invocare più volte la stessa funzione ma con criteri di ordinamento diversi.

Ecco un esempio di codice nel quale si ordina una lista di liste in base alla loro lunghezza:

-module(listsort).
-export([by_length/1]).

by_length(Lists) ->
    F = fun(A,B) when is_list(A), is_list(B) ->
            length(A) < length(B)
        end,
    qsort(Lists, F).

 qsort([], _) -> [];
 qsort([Pivot|Rest], Smaller) ->
     qsort([ X || X <- Rest, Smaller(X, Pivot)], Smaller)
     ++ [Pivot] ++
     qsort([ Y || Y <- Rest, not(Smaller(Y, Pivot))], Smaller).

Ciò non sarebbe possibile se il linguaggio non supportasse le funzioni di ordine superiore.

[modifica] Voci correlate

[modifica] Collegamenti esterni


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -