【发布时间】:2015-07-27 10:15:47
【问题描述】:
我正在尝试学习 Erlang。我已经安装了一个运行时,但无法让它工作。以下代码:
X = 3.
有效,但以下语句均无效:
f(X)->X.
F() ->0.
F([])->[].
我回复1: syntax error before: '->'。我从这个tutorial 尝试了word_count。我得到了同样的错误。
这里有什么问题?
【问题讨论】:
我正在尝试学习 Erlang。我已经安装了一个运行时,但无法让它工作。以下代码:
X = 3.
有效,但以下语句均无效:
f(X)->X.
F() ->0.
F([])->[].
我回复1: syntax error before: '->'。我从这个tutorial 尝试了word_count。我得到了同样的错误。
这里有什么问题?
【问题讨论】:
在 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].
【讨论】:
在 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
【讨论】: