开发学院

您的位置:首页>教程>正文

教程正文

Erlang 函数

Erlang 函数

  Erlang是一种函数式编程语言,因此您将会看到很多关于函数在Erlang中如何工作的内容。本章将介绍Erlang中的函数。

定义函数

  Erlang中定义函数的语法如下:

FunctionName(Pattern1… PatternN) ->
Body;

  这其中,

  • FunctionName − 函数的名字

  • Pattern1… PatternN − 每个参数都是一个模式。参数的数目N是函数的基本原则,函数由模块名、函数名和基本原则定义。也就是说,两个具有相同名称且在同一模块中但具有不同算法的函数是两个不同的函数。

  • Body − 函数体由逗号分隔的表达式序列组成(,):

  下面是函数的一个例子

-module(helloworld). 
-export([add/2,start/0]). 
add(X,Y) -> 
   Z = X+Y, 
   io:fwrite("~w~n",[Z]). 
start() -> 
   add(5,6).

  应注意以下有关上述程序的要点-

  •   我们定义了两个函数,一个叫做add,它接受两个参数,另一个是start函数。

  •   这两个函数都是使用导出函数定义的。如果不这样做,我们将无法使用函数。

  •   一个函数可以在另一个函数中调用。在这里,我们从start函数调用add函数。

  下面是输出:

11

匿名函数

  匿名函数是没有关联名称的函数。Erlang具有定义匿名函数的功能。下面的程序是匿名函数的示例。

-module(helloworld). 
-export([start/0]). 
start() -> 
   Fn = fun() -> 
      io:fwrite("Anonymous Function") end, 
   Fn().

  关于上述示例,需要注意以下几点-

  •   匿名函数是用fun ( )关键字定义的。

  •   该函数被分配给一个名为Fn的变量。

  •   函数是通过变量名调用的。

  上述程序的输出为:

Anonymous Function

具有多个参数的函数

  Erlang函数可以用零个或多个参数定义。函数重载也是可能的,其中您可以多次定义具有相同名称的函数,只要它们具有不同数量的参数。

在下面的示例中,函数演示是用每个函数定义的多个参数定义的。

-module(helloworld). 
-export([add/2,add/3,start/0]). 
add(X,Y) -> 
   Z = X+Y, 
   io:fwrite("~w~n",[Z]). 
add(X,Y,Z) -> 
   A = X+Y+Z, 
   io:fwrite("~w~n",[A]). 
start() ->
   add(5,6), 
   add(5,6,6).

  以下是程序的输出

11
17

具有保护序列的函数

  Erlang中的函数还具有保护序列的能力。这些只是表达式,只有当计算为true时才会导致函数运行。

下面的程序显示了具有保护序列的函数的语法。

FunctionName(Pattern1… PatternN) [when GuardSeq1]->
Body;

这其中,

  • FunctionName − 函数的名称

  • Pattern1… PatternN − 每个参数都是一个模式。参数的数目N是函数的基本原则,函数由模块名、函数名和基本原则定义。也就是说,两个具有相同名称且在同一模块中但具有不同算法的函数是两个不同的函数。

  • Body − 函数体由逗号分隔的表达式序列组成(,):

  • GuardSeq1 − 在调用函数时计算的表达式。

下面是示例:

-module(helloworld). 
-export([add/1,start/0]). 

add(X) when X>3 -> 
   io:fwrite("~w~n",[X]). 

start() -> 
   add(4).

  下面是代码的输出:

4

  如果add函数被调用为add ( 3 ),则程序将导致错误。