在 Erlang 中检查列表中的项目
Posted
技术标签:
【中文标题】在 Erlang 中检查列表中的项目【英文标题】:check for item in list in Erlang 【发布时间】:2015-12-08 09:50:29 【问题描述】:我正在尝试在 Erlang 中创建检查功能 我有一个单词和单词列表
list_word() ->
["bad1", "bad2", "bad3"].
我正在尝试检查列表中的这个单词是否返回 true 除了返回 false
示例:
check_list() ->
badword = list_word(),
if "bad1" == badword ->
%% do some thing
在这种情况下,列表中的第一个单词,但第二个单词不是,我不希望它返回 true
check_list() ->
badword = list_word(),
if "bad1 test" == badword ->
%% do some thing
我该怎么做?
【问题讨论】:
【参考方案1】:看看lists:member/2
——它被实现为BIF
,所以它非常快。
case lists:member("bad1", list_word()) of
true ->
%% do something
;
false ->
ok
end.
编辑: 对于您的第二个示例,您可以执行以下操作:
Words = list_word(),
Found = fun(Word) -> lists:member(Word, Words) end,
BadWords = string:tokens("bad1 test", " "),
case lists:any(Found, BadWords) of
true ->
%% do something
;
false ->
ok
end.
【讨论】:
@emzemzx:我建议你从erlang.org/doc/getting_started/seq_prog.html开始 谢谢,如果我添加这样的大词怎么办。 lists:member("bad1 test", list_word()) 列表中的第一个单词但第二个单词不是,我不希望它返回 true,可以吗? 那么你必须更具体。你可以做类似lists:any(fun(X) -> lists:member(X, list_word()) end, string:tokens("bad1 test", " "))
这样的事情,但是会出现很多问题,比如为什么你有"bad1 test"
而不是["bad1", "test"]
,list_word()
在实际代码中调用的成本是多少,以及这段代码的目的是什么。跨度>
以上是关于在 Erlang 中检查列表中的项目的主要内容,如果未能解决你的问题,请参考以下文章