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).
1.什麼是錯誤信息? 2.上一行是什麼樣的? 3. Erlang並不使用惰性評估,所以函數將無限循環,但這不是語法錯誤。 –
我會根據您的請求添加修改,以及我正在做的更新版本。不管語法錯誤,Erlang不使用懶惰評估的事實意味着這不起作用。 – Maria