Erlang编程入门之认识其模块跟函数

Erlang编程入门之认识其模块和函数

【IT168 技术文档】一个编程语言如果只能让我们从shell中运行代码,那么可以说这个语言的用处受到了很大的限制,至少我会感觉到不爽。这里有一个小的Erlang程序。我们将下面的内容键入一个叫做tut.erl的文件(这里需要注意到的是我们的tut.erl文件应该放在erl程序的同一个目录下,文件名应该和模块名相同,这样Erlang才能很好的找到我们的模块,至于编辑器随便一个支持纯文本的就可以哈)。如果我们的编辑器有一个Erlang模式就可能编写起来更加方便,并且代码的格式也会变得更加规范,但是我们也许也会产生对这些编辑器或者IDE的强烈依赖性。下面就是我们要键入的代码:
  -module(tut).
  -export([double/1]).
  double(X) ->
  2 * X.


  不难看出,我们的程序的任务就是将输入的数字进行“乘以2”的操作。我们后面会解释前两行的含义。我们现在来编译一下这个程序,我们在Erlang shell中键入下面的内容:

  3> c(tut).

  {ok,tut}

  {ok,tut} 告诉我们编译成功的完成了。如果显示的是“error”,那么可能我们的文件位置或者键入的代码文本存在某些问题,出错信息会给我们一些提示,我们按照提示做就好了,仔细的检查代码在任何时候都是需要的 : )

  现在我们来运行以下这个程序:

  4> tut:double(10).

  20

  和预计的一样,10的“乘以2”之后是20(貌似是废话)。

  现在让我们回到最开始的两行代码。Erlang程序一般是保存在文件中的。每个文件我们在Erlang中称为module(模块)。第一行就是告诉我们这个模块的名字。

  -module(tut).

  这段代码告诉我们该模块的名称为“tut”。注意这行最后的“.”符号是必不可少的。这个模块名必须和保存这段代码的文件(后缀为“erl”的文件)有相同的名称。所以这里我们要求了文件名必须是“tut.erl”的原因。当我们在使用另一个模块中的函数时,我们使用下面的语法module_name:function_name(arguments).所以:

  4> tut:double(10).

  意味着我们从tut模块中调用一个叫做double的函数,并且带有参数“10”.

  第二行:

  -export([double/1]).

  含一位模块tut中包含一个名叫double的函数,并且带有一个参数(就是例子中的“10”),并且这个函数可以被从模块tut之外调用到。更深入的内容我们后面会介绍。现在回头看看上面行尾的句号“.”。

  现在有一个稍微复杂一点的例子,是用来进行阶乘(比如4的阶乘就是1*2*3*4的结果)操作的。键入下面的代码到一个新建的文本文件,并命名为tut1.erl:
  -module(tut1).
  -export([fac/1]).
  fac(1) ->
  1;
  fac(N) ->
  N * fac(N - 1).


  编译这个文件:

  5> c(tut1).

  {ok,tut1}

  现在我们计算4的阶乘:

  6> tut1:fac(4).

  24

  第一部分:

  fac(1) ->

  1;

  含义为1的阶乘是1.注意到这部分最后的“;”符号,它预示着下面还有这个函数的其他部分。第二部分:

  fac(N) ->

  N * fac(N - 1).

  含义是N的阶乘等于N乘以N-1的阶乘。注意这部分最后的符号“.”,含义为对于该函数已经没有更多的内容了,函数就此结束。

  一个函数可以有很多的参数。让我们扩展这个tut1模块,现在多包含一个“白痴函数”:两个数的相乘:
  -module(tut1).
  -export([fac/1, mult/2]).
  fac(1) ->
  1;
  fac(N) ->
  N * fac(N - 1).
  mult(X, Y) ->
  X * Y.


  注意到我们也扩展了-export这行,加入了一个包含两个参数的函数mult。

  编译一下:

  7> c(tut1).

  {ok,tut1}

  试一下我们的代码是否正常工作了:

  8> tut1:mult(3,4).

  12

  上面的例子使用了整数进行乘法运算,其中N/X/Y成为变量。注意:变量必须是以大写字母开头,否则编译会提示出错。下面的变量名就是合法的:Number,ShoeSize,Age等。