Erlang - pętle

Erlang jest funkcjonalnym językiem programowania i należy pamiętać o wszystkich funkcyjnych językach programowania, ponieważ nie oferują one żadnych konstrukcji dla pętli. Zamiast tego programowanie funkcjonalne opiera się na koncepcji zwanej rekursją.

while Implementacja instrukcji

Ponieważ w Erlangu nie jest dostępna bezpośrednia instrukcja while, do wykonania instrukcji while należy użyć technik rekurencyjnych dostępnych w Erlangu.

Postaramy się zastosować tę samą implementację pętli while, jaka jest stosowana w innych językach programowania. Poniżej przedstawiono ogólny schemat, który będzie przestrzegany.

Spójrzmy na przykład, jak możemy użyć rekurencji do zaimplementowania while pętla w Erlang.

Przykład

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

Na temat powyższego programu należy zwrócić uwagę na następujące kluczowe punkty:

  • Zdefiniuj funkcję rekurencyjną o nazwie while, która symulowałaby implementację naszej pętli while.

  • Jako przykład wprowadź listę wartości zdefiniowanych w zmiennej X do naszej funkcji while.

  • Funkcja while przyjmuje każdą wartość z listy i przechowuje wartość pośrednią w zmiennej „Acc”.

  • Pętla while jest następnie wywoływana rekurencyjnie dla każdej wartości z listy.

Wynik powyższego kodu będzie -

Wynik

0
1
2
3

dla instrukcji

Ponieważ nie ma bezpośredniego for instrukcji dostępnej w Erlangu, należy użyć technik rekurencyjnych dostępnych w Erlangu, aby wykonać for implementacja instrukcji.

Postaramy się postępować zgodnie z tą samą implementacją forpętla, jak jest przestrzegana w innych językach programowania. Poniżej przedstawiono ogólny schemat, którego należy przestrzegać.

Spójrzmy na przykład, jak możemy użyć rekurencji do zaimplementowania for pętla w Erlang.

Przykład

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

Na temat powyższego programu należy zwrócić uwagę na następujące kluczowe punkty:

  • Definiujemy funkcję rekurencyjną, która symulowałaby implementację naszego for loop.

  • Używamy osłony w funkcji „for”, aby zapewnić, że wartość N lub limit jest wartością dodatnią.

  • Rekurencyjnie wywołujemy funkcję for, zmniejszając wartość N przy każdej rekursji.

Wynik powyższego kodu będzie -

Wynik

Hello
Hello
Hello
Hello
Hello