Erlang - Funs

Les funs sont utilisés pour définir des fonctions anonymes dans Erlang. La syntaxe générale d'une fonction anonyme est donnée ci-dessous -

Syntaxe

F = fun (Arg1, Arg2, ... ArgN) ->
   ...
End

  • F - Il s'agit du nom de variable attribué à la fonction anonyme.

  • Arg1, Arg2, ... ArgN - Ce sont les arguments qui sont passés à la fonction anonyme.

L'exemple suivant montre comment la fonction anonyme peut être utilisée.

Exemple

-module(helloworld). 
-export([start/0]). 

start() -> 
   A = fun() -> io:fwrite("Hello") end, 
   A().

Les choses suivantes doivent être notées à propos du programme ci-dessus.

  • La fonction anonyme est affectée à la variable A.

  • La fonction anonyme via la variable A ().

Lorsque nous exécutons le programme ci-dessus, nous obtiendrons le résultat suivant.

“Hello”

Un autre exemple de fonction anonyme est le suivant, mais c'est avec l'utilisation de paramètres.

-module(helloworld). 
-export([start/0]). 

start() -> 
   A = fun(X) -> 
      io:fwrite("~p~n",[X]) 
      end, 
   A(5).

Lorsque nous exécutons le programme ci-dessus, nous obtiendrons le résultat suivant.

Production

5

Utilisation de variables

La fonction anonyme a la capacité d'accéder aux variables qui sont en dehors de la portée de la fonction anonyme. Regardons un exemple de ceci -

Exemple

-module(helloworld). 
-export([start/0]). 

start() -> 
   B = 6, 
   A = fun(X) -> 
      io:fwrite("~p~n",[X]), 
      io:fwrite("~p~n",[B]) 
      end, 
   A(5).

Les choses suivantes doivent être notées à propos du programme ci-dessus.

  • La variable B est en dehors de la portée de la fonction anonyme.

  • La fonction anonyme peut toujours accéder à la variable définie dans la portée globale.

Lorsque nous exécutons le programme ci-dessus, nous obtiendrons le résultat suivant.

Production

5
6

Fonctions dans les fonctions

L'un des autres aspects les plus puissants des fonctions d'ordre supérieur est que vous pouvez définir une fonction dans une fonction. Voyons un exemple de la façon dont nous pouvons y parvenir.

Exemple

-module(helloworld). 
-export([start/0]). 

start() -> 
   Adder = fun(X) -> fun(Y) -> io:fwrite("~p~n",[X + Y]) end end, 
   A = Adder(6), 
   A(10).

Les choses suivantes doivent être notées à propos du programme ci-dessus.

  • L'additionneur est une fonction d'ordre supérieur définie comme fun (X).

  • La fonction additionneur fun (X) fait référence à une autre fonction fun (Y).

Lorsque nous exécutons le programme ci-dessus, nous obtiendrons le résultat suivant.

Production

16