对于erlang,shell到编辑器有什么特殊的语法吗?

0sgqnhkj  于 2022-12-16  发布在  Erlang
关注(0)|答案(1)|浏览(160)

我是一个新来的erlang,我一直在学习在控制台/命令提示符下编码。现在我必须在编辑器上做下面的代码。我需要给定的数字(一个列表[1,2,3])的和与foldl/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).

请原谅我的错误格式,请让我知道正确的方法来做同样的事情的编辑器。
先谢了

zdwk9cvp

zdwk9cvp1#

我一直在学习在控制台/命令提示符下编码。
这不是很聪明,但是如果你喜欢在shell中输入东西的单调乏味,那就试试吧。如果你在一个文件中输入代码,使用一个自动缩进的erlang代码编辑器,然后编译你的文件,你可以很容易地编辑文件进行修改,然后重新编译。
现在我必须在编辑器上执行下面的代码。

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

=========
重读你的帖子后,听起来你想在控制台中转换这一行:

lists:foldl(fun(X, Sum) -> X + Sum end,0,[1,2,3])

文件中定义的函数。该函数应该有一个参数,该参数是一个数字列表,应该使用lists:foldl/3对这些数字求和。对吗?如果对,下面是一个示例:
1.将此代码放入某个目录下名为a.erl的文件中:

-module(a).
 -export([f1/1]).

 f1(List) ->
      lists:foldl(
        fun(X, Sum) -> X + Sum end,
        0,
        List
      ).

注意模块名和文件名必须匹配。
1.在终端窗口中,将目录切换到包含该文件的目录,例如

$ cd erlang_programs

1.然后执行以下操作:

~/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调用该函数。

相关问题