Erlang - Развлечения

Funs используются для определения анонимных функций в Erlang. Общий синтаксис анонимной функции приведен ниже -

Синтаксис

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

куда

  • F - Это имя переменной, присвоенное анонимной функции.

  • Arg1, Arg2, ... ArgN - Это аргументы, которые передаются анонимной функции.

В следующем примере показано, как можно использовать анонимную функцию.

пример

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

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

В отношении вышеуказанной программы необходимо отметить следующее.

  • Анонимная функция присваивается переменной A.

  • Анонимная функция через переменную A ().

Когда мы запустим указанную выше программу, мы получим следующий результат.

“Hello”

Другой пример анонимной функции следующий, но он с использованием параметров.

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

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

Когда мы запустим указанную выше программу, мы получим следующий результат.

Вывод

5

Использование переменных

Анонимная функция имеет возможность доступа к переменным, которые находятся за пределами анонимной функции. Давайте посмотрим на пример этого -

пример

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

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

В отношении вышеуказанной программы необходимо отметить следующее.

  • Переменная B выходит за рамки анонимной функции.

  • Анонимная функция по-прежнему может обращаться к переменной, определенной в глобальной области.

Когда мы запустим указанную выше программу, мы получим следующий результат.

Вывод

5
6

Функции внутри функций

Одним из других наиболее важных аспектов функций высшего порядка является то, что вы можете определять функцию внутри функции. Давайте посмотрим на примере, как мы можем этого добиться.

пример

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

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

В отношении вышеуказанной программы необходимо отметить следующее.

  • Adder - это функция более высокого порядка, определяемая как fun (X).

  • Функция сумматора fun (X) имеет ссылку на другую функцию fun (Y).

Когда мы запустим указанную выше программу, мы получим следующий результат.

Вывод

16