Erlang - Bucles

Erlang es un lenguaje de programación funcional y lo que debe recordarse acerca de todos los lenguajes de programación funcional es que no ofrecen ninguna construcción para bucles. En cambio, la programación funcional depende de un concepto llamado recursividad.

while Implementación de declaración

Dado que no hay una instrucción while directa disponible en Erlang, uno tiene que usar las técnicas de recursividad disponibles en Erlang para llevar a cabo una implementación de instrucción while.

Intentaremos seguir la misma implementación del ciclo while que se sigue en otros lenguajes de programación. A continuación se muestra el flujo general que se seguirá.

Veamos un ejemplo de cómo podemos usar la recursividad para implementar la while bucle en Erlang.

Ejemplo

-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).

Los siguientes puntos clave deben tenerse en cuenta sobre el programa anterior:

  • Defina una función recursiva llamada while que simule la implementación de nuestro ciclo while.

  • Ingrese una lista de valores definidos en la variable X para nuestra función while como ejemplo.

  • La función while toma cada valor de lista y almacena el valor intermedio en la variable 'Acc'.

  • A continuación, se llama al bucle while de forma recursiva para cada valor de la lista.

La salida del código anterior será:

Salida

0
1
2
3

para Declaración

Dado que no existe for declaración disponible en Erlang, uno tiene que usar las técnicas de recursividad disponibles en Erlang para llevar a cabo una for implementación de la declaración.

Intentaremos seguir la misma implementación del forbucle como se sigue en otros lenguajes de programación. A continuación se muestra el flujo general que se debe cumplir.

Veamos un ejemplo de cómo podemos usar la recursividad para implementar la for bucle en Erlang.

Ejemplo

-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).

Los siguientes puntos clave deben tenerse en cuenta sobre el programa anterior:

  • Estamos definiendo una función recursiva que simularía la implementación de nuestro for loop.

  • Estamos usando una protección dentro de la función 'para' para asegurarnos de que el valor de N o el límite sea un valor positivo.

  • Llamamos recursivamente a la función for, reduciendo el valor de N en cada recursión.

La salida del código anterior será:

Salida

Hello
Hello
Hello
Hello
Hello