我有一个类似List = ["google","facebook","instagram"]
的列表和一个字符串P1 = "https://www.google.co.in/webhp?pws=0&gl=us&gws_rd=cr"
。
现在我需要找到List
中P1
的哪个元素。
为此,我实现了下面的递归函数,但它返回ok
作为最终值,有没有找到{在这种情况下} google
时,然后返回H
的方法并终止堆栈中的其他递归调用。
我希望此函数返回google
。
traverse_list([],P1)-> ok;
traverse_list([H|T],P1) ->
Pos=string:str(P1,H),
if Pos > 1 ->
io:fwrite("Bool inside no match is ~p~n",[Pos]),
io:fwrite("inside bool nomathc, ~p~n",[H]),
H;
true->
io:fwrite("value found :: ~p~n",[Pos])
end,
traverse_list(T,P1).
答案 0 :(得分:2)
它返回ok
,因为递归循环的停止条件是这样的:
traverse_list([],P1)-> ok;
为此,您应该使用lists:filter/2
或列表理解:
List = ["google","facebook","instagram"],
P1 = "https://www.google.co.in/webhp?pws=0&gl=us&gws_rd=cr",
lists:filter(fun(X) -> string:str(P1,X) > 1 end,List),
% or
[X || X <- List, string:str(P1,X) > 1],