我已經開始在Erlang中進行一些操作,並且我得到:** 1: syntax error before: '->' **
每當我爲例如聲明任何函數時。來計算一個列表的總和(這是實驗性的,有一個列表查找和的內置函數)。Erlang獲取錯誤** 1:語法錯誤之前:' - >'**
sum([]) -> 0;
sum([H | T]) -> H + sum(T).
in erl shell(v 5.5.5)。
在此先感謝
我已經開始在Erlang中進行一些操作,並且我得到:** 1: syntax error before: '->' **
每當我爲例如聲明任何函數時。來計算一個列表的總和(這是實驗性的,有一個列表查找和的內置函數)。Erlang獲取錯誤** 1:語法錯誤之前:' - >'**
sum([]) -> 0;
sum([H | T]) -> H + sum(T).
in erl shell(v 5.5.5)。
在此先感謝
您不能定義使用相同的語法在外殼的功能在ERL文件。
雖然你可以定義樂趣。
語法在外殼需要是:
Sum = fun([], _) -> 0; ([H | T], F) -> H + F(T, F) end,
Sum([1,2,3], Sum).
注意,遞歸的匿名函數(這是)的醜陋的方式進行定義。您基本上必須將該函數作爲參數傳遞給它自己。
直接的答案是,在模塊定義文件中,您有屬性,如-module().
,-export().
等,以及函數定義,而在shell中輸入要評估的表達式。函數定義不是表達式。
如果你想在shell中定義一個本地臨時函數,你需要像@DanielLuna所顯示的那樣使用fun。這些都是匿名匿名函數,所以遞歸調用是一種痛苦,並不是Erlang特有的,而是所有匿名函數都通用的。
N.B.
Sum = fun([], _) -> 0; ([H | T], F) -> H + F(T, F) end.
在殼
確實NOT定義了一個名爲Sum
功能,但定義了一個匿名功能和結合可變Sum
它。
這也是爲什麼你可以在模塊中做的唯一事情是定義函數,而不是在模塊加載時被評估的表達式。
謝謝,我有正確的方式來聲明模塊和導出函數。 – pranjal 2010-09-02 05:47:50
或使用列表:foldl/2函數。這是從Erlang參考手冊直接複製的。
1> lists:foldl(fun(X, Sum) -> X + Sum end, 0, [1,2,3,4,5]).
15
aka:想要shell中的函數嗎?玩的開心! – 2010-09-01 04:14:19
我希望錯誤消息更有幫助。 – dotslash 2016-07-25 04:52:32