W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
由于恒定性,Elixir中的環(huán)(與其他函數(shù)式編程語言一樣)和命令式語言中的寫法是不同的。例如,C語言中的寫法是這樣的:
for(i = 0; i < sizeof(array); i++) {
array[i] = array[i] * 2;
}
上述例子中,我們更改了數(shù)組和變量i。在Elixir中是不可更改的。所以函數(shù)式語言中以遞歸來替代:一個函數(shù)被反復(fù)調(diào)用,直到情況達(dá)到停止條件。在這個進(jìn)程中沒有數(shù)據(jù)被改變。思考下面的例子,一個字符串被打印任意次:
defmodule Recursion do
def print_multiple_times(msg, n) when n <= 1 do
IO.puts msg
end
def print_multiple_times(msg, n) do
IO.puts msg
print_multiple_times(msg, n - 1)
end
end
Recursion.print_multiple_times("Hello!", 3)
# Hello!
# Hello!
# Hello!
與?case
?類似,一個函數(shù)可以擁有許多從句。當(dāng)傳遞來的參數(shù)與從句的參數(shù)模式相匹配并且其衛(wèi)語句返回值為真,那么特定的從句就會被執(zhí)行。
第一個從句的守衛(wèi)說道“當(dāng)且僅當(dāng)n
小于或等于1
時使用這個定義”。由于不符合這個情形,Elixir繼續(xù)到下一個從句定義。
第二個定義匹配模式成功,并且沒有守衛(wèi),所以被執(zhí)行了。它先打印了我們的msg
然后調(diào)用了他自己并傳遞了參數(shù)n-1 (2)
。
我們的msg
再次被打印,print_multiple_times/2
也再次被調(diào)用,這一次第二個參數(shù)被設(shè)置成了1
。由于n
已經(jīng)被設(shè)置成1
了,print_multiple_times/2
的第一個定義中的衛(wèi)語句執(zhí)行結(jié)果為真,所以我們執(zhí)行了這個定義。msg
被打印同時沒有額外的語句需要執(zhí)行了。
我們這樣定義print_multiple_times/2
,無論第二個參數(shù)是什么數(shù)字,它不是觸發(fā)了我們的第一個定義(被稱為基本案例),就是觸發(fā)了我們的第二個定義,并向基本案例更近了一步。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: