首页 > Erlang并发教程 > 4.2 Erlang并发编程-常用列表处理函数member
2013
11-06

4.2 Erlang并发编程-常用列表处理函数member

member

member(X, L)X是列表L的元素时返回true,否则返回false

member(X, [X|_]) -> true;
member(X, [_|T]) -> member(X, T);
member(X, []) -> false.

member的第一个子句匹配的是X为列表的第一个元素的情况,这种情况下member返回true。如果第一个子句不匹配,则第二个子句将匹配第二个参数是非空列表的情况,这种情况下模式[_|T]匹配一个非空列表并将T绑定到列表的尾部,然后以原来的X及列表的尾部T递归调用membermember前两个子句就是在说当X是列表的第一个元素(头部),或它被包含在列表的剩余部分(尾部)中时,X就是该列表的一个成员。member的第三个子句是说X不可能是空列表[]的成员,并因此返回false

我们将member的求值过程列举如下:

> lists:member(a,[1,2,a,b,c]).
(0)lists:member(a,[1,2,a,b,c])
(1).lists:member(a, [2,a,b,c])
(2)..lists:member(a,[a,b,c])
(2)..true
(1).true
(0)true
true
> lists:member(a,[1,2,3,4]).
(0)lists:member(a, [1,2,3,4])
(1).lists:member(a, [2,3,4])
(2)..lists:member(a, [3,4])
(3)...lists:member(a, [4])
(4)....lists:member(a, [])
(4)....false
(3)...false
(2)..false
(1).false
(0)false
false

留下一个回复

你的email不会被公开。