Erlang的模式匹配

来源:互联网 发布:和谐网络用语 编辑:程序博客网 时间:2024/05/22 04:36

1. 模式匹配: Pattern = Expression

    模式(Pattern):由绑定或未绑定的变量,以及字符量(如基元atom,整数,或字符串)组成。

    表达式(Expression):包括数据结构,绑定的变量,数学运算和函数调用。Expression不能包含未绑定的变量。

2. 模式匹配的结果有两种:

    匹配成功:未绑定变量编程绑定变量。

    匹配失败:没有绑定值。

3. 模式匹配过程:

    先计算Expression的值,然后与Pattern比较:

    (1). 先比较Pattern和Expression的形式。如三个元素的元组只能匹配有三个元素的元组,[H|T] 只能匹配非空列表。

    (2). Pattern中的常量必须和Expression中对应位置上的值相等。

    (3). 如果模式匹配成功,会把未绑定的变量绑定到相应的表达式的值上。

    (4). 绑定变量的值,必须和Expression相应位置上的值相等。

4. 模式匹配的用途:

    A. 变量赋值

    B. 控制程序的执行流程

    C. 从复合数据类型中取值

5. 模式匹配demo:

(1). 提取列表 [1] 的头部和尾部: [Head|Tail] = [1]      必须使用未绑定的变量

(2). [Element,Element,_ ] = [1,1,2]    使用通配符_ 匹配任何东西,并且不产生任何绑定。

       [Element,_Arg] = [1,2]                   变量可以使用下划线开始,表示无关紧要的变量。用于不使用的变量。

(3).[A,B,C,D] = [1,2,3]   匹配失败,因为Pattern和Expression的列表元素个数不同。

      [A,B,C|D]=[1,2,3]     匹配成功,D将绑定到空列表[].

      [H|T] = []                    匹配失败,因为[H|T]意味着列表至少有一个元素。

(4). {A,_int,[B,_int],{B}} = {abc,22,[23,22],{23}}   模式匹配失败,因为_int 先绑定到整数22,然后一个包含整数22的列表与_int比较。

 

参考资料:《Erlang程序设计》

原创粉丝点击