2013-09-22 73 views
0

我真的學習Erlang和從書做練習:二郎運動,創建列表

「寫一個函數返回的格式列表[1,2,...,N-1,N]。 創建(3) - > [1,2,3]「。

我有一個解決方案,那就是:

create(N) -> create(1, N). 
create (M,M) -> [M]; 
create(M,N) -> [M | create(M+1, N)]. 

我通過它打的時候去了,但我只是不能老是明白什麼是對解決方案的2線發生。可以請別人解釋一下嗎? 謝謝。

編輯。 好了,我想我真的在正確的軌道上理解它。在第2行中,創建了新列表,其中基本上有1個將轉到Head和N到Tail?如果是,則在第3行中,M表示,我們在第2行創建新的列表,N代表從線1的輸入整數?再次感謝。

回答

1

溶液的第2行結束是簡單地只是一個遞歸函數的基礎情況。

如果這兩個數字是相同的create(3,3),那麼它將通過遞歸函數返回一個列表[3],並從中創建一個列表。

創建(3) - >創建(1,3) - > [1 |創建(2,3)] - > [2,|創建(3,3)] - > [3] - > [2 | [3]] - > [1 | [2,3]] - >並[1,2,3]

1
create (M,M) -> [M]; 

即簡單地意味着創建從M到M,其僅具有一個數,M

例如列表,

create (1,1) 

會給你[1],因爲列表從1開始,並且在1