English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Fun en Erlang

Fun se utiliza para definir funciones anónimas en Erlang. La sintaxis general de la función anónima es la siguiente:

Sintaxis

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

Descripción

  • F −Este es el nombre de la variable asignada a la función anónima.

  • Arg1, Arg2, ... ArgN −Estos son los parámetros pasados a la función anónima.

El siguiente ejemplo muestra cómo se utiliza la función anónima.

Ejemplo

-> module(helloworld). 
-> export([start/> 0]). 
start() -> 
   A = fun() -> io:fwrite("Hello") end, 
   A().

Sobre el programa anterior, hay algunos puntos que deben tenerse en cuenta.

  • La función anónima se asigna a la variable A.

  • Función anónima A() mediante variables.

Cuando ejecutamos el programa anterior, obtendremos los siguientes resultados.

"Hello"

Otro ejemplo de función anónima, pero esta vez utilizando parámetros.

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

Cuando ejecutamos el programa anterior, obtendremos los siguientes resultados.

Salida

5

Uso de variables

Las funciones anónimas tienen la capacidad de acceder a variables fuera del ámbito de la función anónima. Veamos un ejemplo.-

Ejemplo

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

Sobre el programa anterior, hay algunos puntos que deben tenerse en cuenta.

  • La variable B está fuera del ámbito de la función anónima.

  • Las funciones anónimas pueden acceder a variables definidas en el ámbito global.

Cuando ejecutamos el programa anterior, obtendremos los siguientes resultados.

Salida

5
6

Función dentro de una función

Una de las características más poderosas de los funciones de orden superior es que puedes definir una función dentro de una función. Vamos a ver un ejemplo de cómo lograr esto.

Ejemplo

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

Sobre el programa anterior, hay algunos puntos que deben tenerse en cuenta.

  • El sumador es una función de orden superior, definida como fun(X).

  • La función de sumador fun(X) hace referencia a otra función fun(Y).

Cuando ejecutamos el programa anterior, obtendremos los siguientes resultados.

Salida

16