Erlang - 在元组中搜索元组

时间:2014-03-02 17:01:54

标签: erlang tuples

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

{add,{var,a},{mul,{num,2},{var,b}}}

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

lists:keymember(b,2,[expr])

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

由于

2 个答案:

答案 0 :(得分:4)

据我所知,目前还没有这样的功能。可能你必须使用递归实现一些自定义解决方案。这是我的例子:

-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.

用法:

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

答案 1 :(得分:1)

请检查您的代码。

  • 第1行:这是一棵树,而不是一个列表。
  • 第2行:expr不是变量。

您想要做的是访问者功能,您必须自己编写。 read this是一个非常好的开始。