2014-07-18 22 views
0

我在Erlang腳本文件中定義了一些函數,並在main函數中調用它們來證明它們的正確性。到目前爲止,我還沒有遇到任何問題,但是突然間我沒有真正的理由發生錯誤。這是有問題的代碼(我已籤此行是註釋掉它的問題):' - >'之前的語法錯誤無明顯原因

fibSeq() -> [0] ++ [1] ++ lists:zipwith(func(X, Y) -> X + Y end, fibs(), lists:delete(0, fibSeq())). 

這個功能背後的想法是有效地計算斐波那契序列。由於函數的無限遞歸性質,可能會出現錯誤,但是我相信我讀了Erlang使用懶惰評估的方式,所以我覺得這應該起作用。

編輯:這將使用list:sublist(fibSeq(), N)list:nth(N, fibSeq())其中N是一個整數。

編輯2: 該錯誤消息是參考線頭號上述fibSeq()函數,並且之前它的代碼是

merge([], []) -> []; 
merge(A, []) -> A; 
merge([], B) -> B; 
merge([A|As], [B|Bs]) when A < B -> [A] ++ merge(As, [B] ++ Bs); 
merge([A|As], [B|Bs]) -> [B] ++ merge([A] ++ As, Bs). 

mergesort([]) -> []; 
mergesort([A]) -> [A]; 
mergesort(As) -> 
    merge(mergesort(lists:sublist(As, length(As) div 2)), mergesort(lists:sublist(As, length(As) div 2 + 1, length(As) div 2 + 1))). 

我已改變斐波納契碼使用不同的我認爲不久後線性評價:

fib(N) when N >= 0, is_integer(N) -> fibHelp(0, 1, N). 

fibHelp(L, _, 0) -> L; 
fibHelp(L, H, A) when A > 0, is_integer(L), is_integer(H), is_integer(A) -> 
    fibHelp(H, L+H, A - 1). 
+0

1.什麼是錯誤信息? 2.上一行是什麼樣的? 3. Erlang並不使用惰性評估,所以函數將無限循環,但這不是語法錯誤。 –

+0

我會根據您的請求添加修改,以及我正在做的更新版本。不管語法錯誤,Erlang不使用懶惰評估的事實意味着這不起作用。 – Maria

回答

3

在二郎山語法高階函數是fun(X) -> X * 2 end。使用func是一個語法錯誤。