Erlang - 在元组中搜索元组

DJD*_*son 1 erlang tuples

使用 Erlang,我有以下表达式:

{add,{var,a},{mul,{num,2},{var,b}}}
Run Code Online (Sandbox Code Playgroud)

我正在使用lists:keymember来查看字母b是否在表达式中:

lists:keymember(b,2,[expr])
Run Code Online (Sandbox Code Playgroud)

但是,它不在第三个元组 '{mul,{num,2},{var,b}' 中,因为它是一个单独的元组。是否有一个函数可以搜索整个元组和其中的元组?

谢谢

mko*_*zun 5

据我所知,没有这样的功能。可能您将不得不使用递归实现一些自定义解决方案。这是我的例子:

-module(test).
-compile(export_all).

find(_, []) -> false;

find(E, T) when is_tuple(T) ->
    find(E, tuple_to_list(T));

find(E, [H|T]) ->
    case find(E, H) of
        false -> find(E, T);
        true -> true
    end;

find(V, E) -> V == E.
Run Code Online (Sandbox Code Playgroud)

和用法:

1> test:find(b, {add,{var,a},{mul,{num,2},{var,b}}}).
true
2> test:find(b, {add,{var,a},{mul,{num,2},{var,c}}}).
false
Run Code Online (Sandbox Code Playgroud)