首页 > Erlang快速入门 > 3.3 Erlang快速入门之模板和方法(二)
2013
10-29

3.3 Erlang快速入门之模板和方法(二)

学习完上一节的简单的程序后,我们来看一个复杂点的程序,同样的我们创建一个文件并命名为”tut1.erl”,并在文件内输入以下内容:

-module(tut1).
-export([fac/1]).

fac(1) ->
	1;
fac(N) ->
	N * fac(N - 1).

不难看出这个程序的作用是求N的阶乘,下面我们来加载并运行

1> c(tut1).
{ok,tut1}
2> tut1:fac(4).
24
3>

得到我们预期结果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.

注意我们在”-explort”同样对新添加的函数作了声明,并且参数个数为2,下面来重新加载/编译(如果不重新编译的话是无法得到预期结果的):

7> c(tut1).
{ok,tut1}
8> tut1:mult(3,4).
12
9> 

总结:在上面的例子中数字都是整数,在函数中的参数”N,X,Y”我们称之为变量变量的首字母需要大写,例如Age,Number这样的变量是合法的。


3.3 Erlang快速入门之模板和方法(二)》有 2 条评论

  1. Y13 说:

    这个例子问题很大,我是个初学者,在写这个程序的时候,给参数输入了一个0,结果程序就卡死了。是不是应该有一个N<0的判断,该怎么加啊?

  2. ss 说:

    fac(1) -> 1;fac(N) -> case N > 0 of true -> N * fac(N – 1); _-> N=1 end.这样应该可以把。。

留下一个回复

你的email不会被公开。