使用 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}' 中,因为它是一个单独的元组。是否有一个函数可以搜索整个元组和其中的元组?
谢谢
据我所知,没有这样的功能。可能您将不得不使用递归实现一些自定义解决方案。这是我的例子:
-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)