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