' - >'之前的语法错误没有明显的理由

时间:2014-07-18 19:26:54

标签: syntax erlang syntax-error

我在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: 错误消息是"Syntax error before '->'",参考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 个答案:

答案 0 :(得分:3)

erlang中高阶函数的语法是fun(X) -> X * 2 end。使用func是语法错误。