程序1.1

    函数可以通过shell程序进行交互式求值。 Shell会提示输入一个表达式,并计算和输出用户输入的任意表达式,例如:

    1. > math1:factorial(6).
    2. 720
    3. > math1:factorial(25).
    4. 15511210043330985984000000

    以上的“>”代表 shell 提示符,该行的其他部分是用户输入的表达式。之后的行是表达式的求值结果。

    factorial 的代码如何被编译并加载至 Erlang 系统中是一个实现相关的问题。

    在我们的例子中,factorial函数定义了两个子句:第一个子句描述了计算factorial(0)的规则,第二个是计算factorial(N)的规则。当使用某个参数对factorial进行求值时,两个子句按照它们在模块中出现的次序被依次扫描,直到其中一个与调用相匹配。当发现一个匹配子句时,符号->右边的表达式将被求值,求值之前函数定义式中的变量将被代入右侧的表达式。

    程序1.2是该规则的一个示例。

    程序1.2

    函数double/1可在模块外被求值[2]times/2则只能在模块内部使用,如:

    1. > math2:double(10).
    2. 20
    3. ** undefined function: math2:times(5,2) **

    在程序1.2中模块声明-module(math2)定义了该模块的名称,导出属性-export([double/1])表示本模块向外部导出具备一个参数的函数double

    函数调用可以嵌套:

    程序1.3

    1. -module(math3).
    2. -export([area/1]).
    3.  
    4. area({square, Side}) ->
    5. Side * Side;
    6. X * Y;
    7. area({circle, Radius}) ->
    8. 3.14159 * Radius * Radius;
    9. area({triangle, A, B, C}) ->
    10. S = (A + B + C)/2,
    11. math:sqrt(S*(S-A)*(S-B)*(S-C)).

    如我们所期望的,对math3:area({triangle,3,4,5})得到6.0000math3:area({square,5})得到 25 。程序1.3 引入了几个新概念: