erlang 的编辑器 shell 是否有任何特殊语法?
Is there any special syntax for shell to editor for erlang?
我是 erlang 的新手,我一直在学习在 console/command 提示符下编码。现在我必须在编辑器上执行以下代码。我需要具有 foldl/3 函数的给定数字(列表 [1,2,3])的总和。
lists:foldl(fun(X, Sum) -> X + Sum end,0,[1,2,3]).
-module(test).
-export([function1/1]).
function1(L) ->
L = [1,2,3],
lists:foldl(fun(X, Sum) -> X + Sum end, 0, L).
请原谅我的格式错误,请告诉我在编辑器上做同样事情的正确方法。
提前致谢
I have been learning to code on console/command prompt.
这不是很聪明,但如果您喜欢在 shell 中输入内容的单调乏味,那就试试吧。如果您在文件中键入代码,使用自动执行缩进的 erlang 代码编辑器,然后编译您的文件,您可以轻松地编辑文件以进行更改,然后重新编译。
Now I have to do the below code on editor.
function1(L) ->
L = [1,2,3],
lists:foldl(fun(X, Sum) -> X + Sum end, 0, L).
首先,该代码中存在一个明显的错误,即您只能对一个变量赋值一次。如果您使用一个参数调用该函数,则参数变量 L
将被分配参数。然而,在下一行,代码再次尝试分配给 L
。错误!
其次,您不能在 shell 中定义命名函数,但是您几乎可以做同样的事情:创建一个匿名函数并将其分配给一个变量。这是一个例子:
1> F1 = fun(Data) ->
1> lists:foldl(fun(X, Sum) -> X + Sum end, 0, Data)
1> end.
#Fun<erl_eval.44.40011524>
2> F1([1, 2, 3]).
6
=========
重新阅读您的 post 后,听起来您想在控制台中转换此行:
lists:foldl(fun(X, Sum) -> X + Sum end,0,[1,2,3])
进入文件中定义的函数。该函数应采用一个参数,其中参数是应使用 lists:foldl/3
求和的数字列表。那是对的吗?如果是这样,这里有一个例子:
将此代码放入某个目录中名为 a.erl
的文件中:
-module(a).
-export([f1/1]).
f1(List) ->
lists:foldl(
fun(X, Sum) -> X + Sum end,
0,
List
).
注意模块名和文件名必须匹配。
在终端 window 中,将目录切换到包含该文件的目录,例如
$ cd erlang_programs
然后这样做:
~/erlang_programs$ erl
Erlang/OTP 24 [erts-12.0.2] [source] [64-bit] [smp:4:4]
[ds:4:4:10] [async-threads:1]
Eshell V12.0.2 (abort with ^G)
1> c(a). <--Compiles the file named a.erl in the current directory.
{ok,a} <--- Or, you may get a listing of errors which must be corrected to compile the file.
2> a:f1([1, 2, 3]).
6
3> a:f1([10, 20, 30]).
60
您必须使用语法 module:function
.
调用该函数
我是 erlang 的新手,我一直在学习在 console/command 提示符下编码。现在我必须在编辑器上执行以下代码。我需要具有 foldl/3 函数的给定数字(列表 [1,2,3])的总和。
lists:foldl(fun(X, Sum) -> X + Sum end,0,[1,2,3]).
-module(test).
-export([function1/1]).
function1(L) ->
L = [1,2,3],
lists:foldl(fun(X, Sum) -> X + Sum end, 0, L).
请原谅我的格式错误,请告诉我在编辑器上做同样事情的正确方法。
提前致谢
I have been learning to code on console/command prompt.
这不是很聪明,但如果您喜欢在 shell 中输入内容的单调乏味,那就试试吧。如果您在文件中键入代码,使用自动执行缩进的 erlang 代码编辑器,然后编译您的文件,您可以轻松地编辑文件以进行更改,然后重新编译。
Now I have to do the below code on editor.
function1(L) -> L = [1,2,3], lists:foldl(fun(X, Sum) -> X + Sum end, 0, L).
首先,该代码中存在一个明显的错误,即您只能对一个变量赋值一次。如果您使用一个参数调用该函数,则参数变量 L
将被分配参数。然而,在下一行,代码再次尝试分配给 L
。错误!
其次,您不能在 shell 中定义命名函数,但是您几乎可以做同样的事情:创建一个匿名函数并将其分配给一个变量。这是一个例子:
1> F1 = fun(Data) ->
1> lists:foldl(fun(X, Sum) -> X + Sum end, 0, Data)
1> end.
#Fun<erl_eval.44.40011524>
2> F1([1, 2, 3]).
6
=========
重新阅读您的 post 后,听起来您想在控制台中转换此行:
lists:foldl(fun(X, Sum) -> X + Sum end,0,[1,2,3])
进入文件中定义的函数。该函数应采用一个参数,其中参数是应使用 lists:foldl/3
求和的数字列表。那是对的吗?如果是这样,这里有一个例子:
将此代码放入某个目录中名为
a.erl
的文件中:-module(a). -export([f1/1]). f1(List) -> lists:foldl( fun(X, Sum) -> X + Sum end, 0, List ).
注意模块名和文件名必须匹配。
在终端 window 中,将目录切换到包含该文件的目录,例如
$ cd erlang_programs
然后这样做:
~/erlang_programs$ erl Erlang/OTP 24 [erts-12.0.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] Eshell V12.0.2 (abort with ^G) 1> c(a). <--Compiles the file named a.erl in the current directory. {ok,a} <--- Or, you may get a listing of errors which must be corrected to compile the file. 2> a:f1([1, 2, 3]). 6 3> a:f1([10, 20, 30]). 60
您必须使用语法
调用该函数module:function
.