在Erlang中使用无关变量匹配元组

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)

有没有一种简单的方法来达到同样的效果?

hdi*_*ima 4

对于简单的情况,最好使用已经提到的列表: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)