2014-03-02 42 views
0

使用Erlang的范围内,我有以下表现:二郎 - 搜索元组的元组

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

,我使用清单:KEYMEMBER看到字母b是表达这样内:

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

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

谢谢

回答

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 
+0

你就不能使用'名单:任何/ 2',而不是你自己的'找到/ 2'?另外,正如@ Fenollp所说,问题是关于一个元组 - 我不认为'|'在元组上工作。 – ZeissS

+0

谢谢,最后我还是去了这样的事情! – DJDMorrison

1

请检查您的代码。

  • Line1:这是一棵树,而不是一个列表。
  • Line2:expr不是一个变量。

你想要做的是访客功能,你必须自己写。 一个非常好的开始将是read this