首页 > Erlang并发教程 > 3.15 Erlang并发编程-函数术语
2013
11-05

3.15 Erlang并发编程-函数术语

BACK TOP文章索引

  1. 术语
  2. 共0条评论

函数定义

以下章节更详细地描述了Erlang函数的语法。首先我来给函数的各个语法元素命名。接着将详细描述这些元素。

术语

考虑以下模块:

程序 2.5

-module(lists2).

-export([flat_length/1]).

%% flat_length(List)
%%  Calculate the length of a list of lists.

flat_length(List) ->
    flat_length(List, 0).

flat_length([H|T], N) when list(H) ->
    flat_length(H, flat_length(T, N));
flat_length([H|T], N) ->
    flat_length(T, N + 1);
flat_length([], N) ->
    N.

以“%”打头的是注释。注释可以从一行的任意位置开始,一直持续到行末。

第1行包含模块声明。该行必须出现在任何其他声明或代码之前。

第1行和第3行开头的“-”称为属性前缀module(list2)便是属性的一个例子。

第2、第4等行是空行——连续的单个或多个空白符、空行、制表符、换行符等,都被当作单个空白符处理。

第3行声明了一个具有一个参数的函数flag_length,该行意味着该函数存在于模块中并会被从模块中导出。

第5、6行是注释。

第8、9行包含了函数flat_length/1的定义。它由单个子句组成。

表达式flat_length(List)称为子句的头部。“->”之后的部分为子句的主体

第11至16行函数flat_length/2的定义——该函数包含三个子句;子句间以分号“;”分隔,在最后的结尾处以“.”结尾。

第11行中flat_length/2的第一个参数为列表[H|T]H表示列表的头部T代表列表的尾部。在关键字when和箭头“->”之间的表达式list(H)称作保护式。只有在参数与函数头部的模式相匹配且保护式断言成立时,函数体才会被求值。

flat_length/2的第一个子句称为保护子句;其他的子句称为无保护子句

flat_length/2是一个局部函数——即不可从模块外部被调用(因为它没有出现在export属性中)。

模块lists2包含了函数flat_length/1flat_length/2的定义。它们代表两个完全不同的函数——这与C或Pascal等语言不通,在这些语言中一个函数名只能出现一次,且只能有固定个数的参数。


留下一个回复

你的email不会被公开。