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 求和的数字列表。那是对的吗?如果是这样,这里有一个例子:

  1. 将此代码放入某个目录中名为 a.erl 的文件中:

     -module(a).
     -export([f1/1]).
    
     f1(List) ->
          lists:foldl(
            fun(X, Sum) -> X + Sum end,
            0,
            List
          ).
    

    注意模块名和文件名必须匹配。

  2. 在终端 window 中,将目录切换到包含该文件的目录,例如

      $ cd erlang_programs
    
  3. 然后这样做:

     ~/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.

    调用该函数