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

Циклы Erlang

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

Реализация оператора while

Поскольку в Erlang нет прямого оператора while, поэтому для выполнения реализации оператора while необходимо использовать рекурсивные технологии, доступные в Erlang.

Мы попробуем следовать той же реализации цикла while, что и в других языках программирования. Вот общая схема, которую мы будем следовать.

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

Пример

-module(helloworld). 
-export([while/1,while/2, start/0]). 
while(L) -> while(L, 0). 
while([], Acc) -> Acc;
while([_|T], Acc) ->
   io:fwrite("~w~n",[Acc]), 
   while(T,Acc+1). 
   
   start() -> 
   X = [1,2,3,4], 
   while(X).

Обратите внимание на следующие моменты в приведенном выше программе,-

  • Определите рекурсивную функцию, называемую while, которая будет имитировать реализацию цикла while.

  • В качестве примера введите список значений, определенный в переменной X, в нашу функцию while.

  • Функция while получает каждое значение списка и хранит промежуточное значение в переменной «Acc».

  • Затем вызывается рекурсивный цикл while для каждого значения в списке.

Вывод кода будет -

Вывод

0
1
2
3

Оператор for

Поскольку Erlang не имеет прямого оператора for, поэтому необходимо использовать рекурсивную технику Erlang для реализации оператора for.

Мы попробуем реализовать цикл for, следуя тому же принципу, что и в других языках программирования. Вот общий процесс, который нужно следовать.

Давайте рассмотрим пример реализации цикла for с использованием рекурсии в Erlang.

Пример

-module(helloworld). 
-export([for/2, start/0]). 
for(0,_) -> 
   []; 
   
   for(N,Term) when N > 0 -> 
   io:fwrite("Hello~n"), 
   [Term|for(N-1,Term)]. 
   
start() -> 
   for(5,1).

Обратите внимание на следующие моменты в приведенном выше программе,-

  • Мы определяем рекурсивную функцию, которая будет имитировать наше реализацияЦикл for.

  • Мы используем меры предосторожности в функции for, чтобы обеспечить, что значение N или предел является положительным.

  • Мы вызываем функцию for рекурсивно, уменьшая значение N в каждом вызове рекурсии.

Вывод приведенного выше кода будет:

Вывод

Привет
Привет
Привет
Привет
Привет