Erlang是一種函數(shù)式編程語(yǔ)言,所有函數(shù)式編程語(yǔ)言都需要記住的是它們不提供任何循環(huán)構(gòu)造。取而代之的是,函數(shù)式編程依賴于稱為遞歸的概念。
由于Erlang中沒有直接的while語(yǔ)句,因此必須使用Erlang中可用的遞歸技術(shù)來(lái)執(zhí)行while語(yǔ)句的實(shí)現(xiàn)。
我們將嘗試遵循與其他編程語(yǔ)言相同的while循環(huán)實(shí)現(xiàn)。以下是將遵循的一般流程。
讓我們看一個(gè)如何使用遞歸在Erlang中實(shí)現(xiàn)while循環(huán)的示例。
-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).
關(guān)于上述程序,需要注意以下要點(diǎn)-
定義一個(gè)稱為 while 的遞歸函數(shù),該函數(shù)將模擬 while 循環(huán)的實(shí)現(xiàn)。
作為示例,將變量 X 中定義的值列表輸入到我們的 while 函數(shù)中。
while函數(shù)獲取每個(gè)列表值,并將中間值存儲(chǔ)在變量“ Acc”中。
然后針對(duì)列表中的每個(gè)值遞歸調(diào)用while循環(huán)。
上面的代碼的輸出將是-
0 1 2 3
由于 Erlang 沒有直接 for 語(yǔ)句,因此必須使用 Erlang 的遞歸技術(shù)來(lái)實(shí)現(xiàn) for 語(yǔ)句。
我們將嘗試按照其他編程語(yǔ)言所遵循的相同的 for 循環(huán)實(shí)現(xiàn)。以下是應(yīng)遵循的一般流程。
讓我們來(lái)看一個(gè)在 Erlang 使用遞歸實(shí)現(xiàn) for 循環(huán)的實(shí)例。
-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).
關(guān)于上述程序,需要注意以下要點(diǎn)-
我們正在定義一個(gè)遞歸函數(shù),該函數(shù)將模擬我們的的實(shí)現(xiàn)for循環(huán)。
我們?cè)凇?for”函數(shù)中使用了保護(hù)措施,以確保N的值或極限為正值。
我們通過在每次遞歸中減小N的值來(lái)遞歸調(diào)用for函數(shù)。
上面的代碼的輸出將是:
Hello Hello Hello Hello Hello