我正在尝试编写一些可以过滤表单中的数组的Erlang:
[{dakota, "cold and snowy"}, {california, "perfect weather"}] % and so on
Run Code Online (Sandbox Code Playgroud)
这就是我所拥有的 - 当我尝试从werl创建.beam时出现语法错误.
-module(matcher).
-export([findkeywords/2]).
findkeywords(Word, Arr) ->
IsMatch = fun({Key, Desc}) ->
lists:any(fun(X) -> X==Word end, string:tokens(Desc, " ")),
lists:filter(IsMatch, [{K, V} || {K, V} <- Arr]).
Run Code Online (Sandbox Code Playgroud)
谁能发现我的语法已关闭?
我在推特上看到你对武器的召唤,只是来看看.:d
如果你想要这个编译,你只是错过了第6行的乐趣.添加它并编译无怨言.
-module(matcher).
-export([findkeywords/2]).
findkeywords(Word, Arr) ->
IsMatch = fun({Key, Desc}) ->
lists:any(fun(X) -> X==Word end, string:tokens(Desc, " ")) end, % ADD THE END HERE
lists:filter(IsMatch, [{K, V} || {K, V} <- Arr]).
Run Code Online (Sandbox Code Playgroud)
你可以稍微清理一下,除非这是你自己的字符串匹配练习.字符串模块具有STR(字符串,字符串) - >索引和RSTR(字符串,字符串) -即在被描述为这样>索引二郎手册:
返回SubString的第一个/最后一个出现位置的字符串.如果String中不存在SubString,则返回0.例如:
> string:str(" Hello Hello World World ", "Hello World").
8
Run Code Online (Sandbox Code Playgroud)
用这个整理一下,你甚至可以将整个东西缩短成一个衬里.列表理解是不必要的,因为数据已经是您尝试提供的格式.
-module(matcher).
-export([findkeywords/2]).
findkeywords(Word, Arr) ->
lists:filter(fun({_Key, Desc}) -> string:str(Desc, Word) > 0 end, Arr).
Run Code Online (Sandbox Code Playgroud)