为什么尝试在 Erlang 中定义函数时不会出现语法错误?
Why cannot do I get syntax errors when trying to define functions in Erlang?
我正在尝试学习Erlang。我已经安装了运行时,但无法使其正常工作。以下代码:
X = 3.
有效,但以下语句中的 none 有效:
f(X)->X.
F() ->0.
F([])->[].
我回来了1: syntax error before: '->'
。我尝试了这个 tutorial 中的 word_count
。我得到了同样的错误。
这里有什么问题?
在 REPL 中你必须使用 fun(...) -> ... end
:
1> F = fun(X) -> X end.
#Fun<erl_eval.6.80484245>
2> F(42).
42
如果文件中有代码,请使用 c
命令:
1> c(word_count).
{ok,word_count}
2> word_count:word_count([]).
0
在 Erlang 模块和 Erlang 中编写函数时语法不同 shell (REPL)。正如 P_A 提到的,您需要调用 F = fun(X) -> X end, F("Echo").
另请注意,函数名称是原子,因此在使用 Erlang 模块编写时必须以小写字母开头。如果你真的想学习 Erlang,我建议你学习 this.
您提到您从事 F# 方面的工作。在这种情况下,F# 和 Erlang 之间的基本区别在于表达式
let Lilo = [|5; 3; -3; 0; 0.5|];;
可以直接写入文件执行。在 Erlang 中,它只能在 Erlang shell 中完成,而不能在文件中完成。
所以你正在尝试的表达式应该在 module 内的一个函数内,与文件同名。考虑 test.erl 文件。您导出的任何函数都可以从外部调用 (shell)。
-module(test).
-export([test/0]).
test() ->
Lilo = [5, 3, -3, 0, 0.5],
[X*2 || X <-Lilo].
我正在尝试学习Erlang。我已经安装了运行时,但无法使其正常工作。以下代码:
X = 3.
有效,但以下语句中的 none 有效:
f(X)->X.
F() ->0.
F([])->[].
我回来了1: syntax error before: '->'
。我尝试了这个 tutorial 中的 word_count
。我得到了同样的错误。
这里有什么问题?
在 REPL 中你必须使用 fun(...) -> ... end
:
1> F = fun(X) -> X end.
#Fun<erl_eval.6.80484245>
2> F(42).
42
如果文件中有代码,请使用 c
命令:
1> c(word_count).
{ok,word_count}
2> word_count:word_count([]).
0
在 Erlang 模块和 Erlang 中编写函数时语法不同 shell (REPL)。正如 P_A 提到的,您需要调用 F = fun(X) -> X end, F("Echo").
另请注意,函数名称是原子,因此在使用 Erlang 模块编写时必须以小写字母开头。如果你真的想学习 Erlang,我建议你学习 this.
您提到您从事 F# 方面的工作。在这种情况下,F# 和 Erlang 之间的基本区别在于表达式
let Lilo = [|5; 3; -3; 0; 0.5|];;
可以直接写入文件执行。在 Erlang 中,它只能在 Erlang shell 中完成,而不能在文件中完成。
所以你正在尝试的表达式应该在 module 内的一个函数内,与文件同名。考虑 test.erl 文件。您导出的任何函数都可以从外部调用 (shell)。
-module(test).
-export([test/0]).
test() ->
Lilo = [5, 3, -3, 0, 0.5],
[X*2 || X <-Lilo].