Erlang - 迴圈



Erlang 是一種函數語言程式設計語言,所有函數語言程式設計語言都需要記住的是,它們不提供任何迴圈結構。相反,函數語言程式設計依賴於稱為遞迴的概念。

while 語句實現

由於 Erlang 中沒有直接的 while 語句,因此必須使用 Erlang 中可用的遞迴技術來執行 while 語句的實現。

我們將嘗試遵循與其他程式語言中 while 迴圈相同的實現方式。以下是將遵循的通用流程。

while Statement Implementation

讓我們來看一個如何使用遞迴在 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 Statement

讓我們來看一個如何使用遞迴在 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 值或限制為正值。

  • 我們透過在每次遞迴時減少 N 的值來遞迴呼叫 for 函式。

上述程式碼的輸出將是:

輸出

Hello
Hello
Hello
Hello
Hello
廣告