Lit*_*les 6 erlang pattern-matching
我正在寻找一种在Erlang中使用部分元组在列表中查找元组的方法,类似于在Prolog中匹配的函子.例如,我想按照代码返回true:
member({pos, _, _}, [..., {pos, 1, 2}, ...])
Run Code Online (Sandbox Code Playgroud)
由于以下错误,此代码无法立即生效:
variable '_' is unbound
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来达到同样的效果?
对于简单的情况,最好使用已经提到的列表:keymember/3。但如果你确实需要member功能,你可以像这样自己实现:
member(_, []) ->
false;
member(Pred, [E | List]) ->
case Pred(E) of
true ->
true;
false ->
member(Pred, List)
end.
Run Code Online (Sandbox Code Playgroud)
例子:
>>> member(fun ({pos, _, 2}) -> true; (_) -> false end, [..., {pos, 1, 2}, ...]).
Run Code Online (Sandbox Code Playgroud)