Erlang - Divertimenti
I divertimenti sono usati per definire funzioni anonime in Erlang. Di seguito viene fornita la sintassi generale di una funzione anonima:
Sintassi
F = fun (Arg1, Arg2, ... ArgN) ->
...
End
Dove
F - Questo è il nome della variabile assegnato alla funzione anonima.
Arg1, Arg2, ... ArgN - Questi sono gli argomenti che vengono passati alla funzione anonima.
L'esempio seguente mostra come utilizzare la funzione anonima.
Esempio
-module(helloworld).
-export([start/0]).
start() ->
A = fun() -> io:fwrite("Hello") end,
A().
Le seguenti cose devono essere annotate sul programma di cui sopra.
La funzione anonima è assegnata alla variabile A.
La funzione anonima tramite la variabile A ().
Quando eseguiamo il programma sopra, otterremo il seguente risultato.
“Hello”
Un altro esempio di funzione anonima è il seguente, ma questo è con l'uso di parametri.
-module(helloworld).
-export([start/0]).
start() ->
A = fun(X) ->
io:fwrite("~p~n",[X])
end,
A(5).
Quando eseguiamo il programma sopra, otterremo il seguente risultato.
Produzione
5
Utilizzo di variabili
La funzione anonima ha la capacità di accedere alle variabili che sono al di fuori dell'ambito della funzione anonima. Diamo un'occhiata a un esempio di questo:
Esempio
-module(helloworld).
-export([start/0]).
start() ->
B = 6,
A = fun(X) ->
io:fwrite("~p~n",[X]),
io:fwrite("~p~n",[B])
end,
A(5).
Le seguenti cose devono essere annotate sul programma di cui sopra.
La variabile B è al di fuori dell'ambito della funzione anonima.
La funzione anonima può ancora accedere alla variabile definita nell'ambito globale.
Quando eseguiamo il programma sopra, otterremo il seguente risultato.
Produzione
5
6
Funzioni all'interno di funzioni
Uno degli altri aspetti più potenti delle funzioni di ordine superiore è che puoi definire una funzione all'interno di una funzione. Vediamo un esempio di come possiamo ottenere questo risultato.
Esempio
-module(helloworld).
-export([start/0]).
start() ->
Adder = fun(X) -> fun(Y) -> io:fwrite("~p~n",[X + Y]) end end,
A = Adder(6),
A(10).
Le seguenti cose devono essere annotate sul programma di cui sopra.
Adder è una funzione di ordine superiore definita divertente (X).
La funzione Adder fun (X) ha un riferimento a un'altra funzione fun (Y).
Quando eseguiamo il programma sopra, otterremo il seguente risultato.
Produzione
16