Erlang基础之模式匹配(2)

来源:互联网 发布:iphoto for mac 10.9 编辑:程序博客网 时间:2024/06/04 18:32

    本节主要介绍元组与列表的模式匹配。

    一、元组的模式匹配

    元组的匹配对于左端有一定的要求,若能匹配成功,则需要:

    1.左端必须和右端具有相同形式,应含有相同数量元素;

    2.左端中的常量必须与右端对应位置的常量相等;

    3.对于右端中不同位置的相同常量,在对应的左端中可以使用同一个变量进行成功的模式匹配;

    4.“_”(下划线)是变量的通配符,可以匹配任何常量,同时并不发生绑定。一般用于在模式匹配时需要忽略掉或无需关心的值的匹配。

   下图为在交互模式下的几个模式匹配的实例:

    语句(1)中,经过模式匹配将一个元组的值绑定到Person变量上。

    语句(2)中,应用模式匹配,将Name变量绑定为john,将Age变量绑定为23。从语句(3)、(4)可以得到印证。注意的是匹配时,原子也必须对应匹配,如果将person改为其它原子,则不能成功进行模式匹配。

    语句(5)中,右端元组中第2、3两项的值相同,所以左端使用两次X变量,可以成功进行模式匹配。因为首次匹配时绑定为3,第二次匹配时,X虽然已绑定,但其值和匹配的常量恰好相等。

    语句(7)中,右端元组中第2、3两项的值不同,所以左端使用相同变量匹配时,会发生错误,有错误提示信息。

    语句(8)中,使用的两次“_”通配符,虽然其匹配的值不同(一次为name,另一次为age),但不发生绑定,所以可以成功匹配。

    二、列表的模式匹配

    在Erlang语言中,列表中的第一值称为Head,而将去除Head元素构成的列表称之为Tail,其常用的匹配形式为:

        [H|T] = [1,2,3,4]

    模式匹配的结果为:H的值为1,T的值为列表[2,3,4]。

    在列表匹配时,也可使用多个变量进行模式匹配,从而一次绑定多个变量,比如:

    上图中,一次绑定了X、Y、T三个变量。

    此外,[A,A|Ta] = [1,1,2,3]也是可以成功匹配的。