Erlang迴圈(while和for)


Erlang是一個函式式程式設計語言,是需要記住所有函式的程式設計語言,它們不提供任何的迴圈結構。而函式式程式設計取決於一個概念叫做遞回。

while語句的實現

由於在 Erlang 中沒有可直接使用的 while 語句,就必須使用遞迴技術在 Erlang 中來實現 while 語句。
我們將努力遵循 while 迴圈的實現,如在其他程式設計語言中一樣。以下是遵守一個流程:
while循環實現
讓我們來看看如何使用遞回來在 Erlang 中實現 while 迴圈的例子。

範例

-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 語句實現的流程:
for循環
讓我們來看看如何在 Erlang 使用遞回來實現 for 迴圈的例子。

範例

-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的值。
上面的程式碼的輸出結果是 -
Hello
Hello
Hello
Hello
Hello