Erlang列表过滤器语法

t3r*_*rse 4 erlang

我正在尝试编写一些可以过滤表单中的数组的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)

谁能发现我的语法已关闭?

Cod*_*ody 6

我在推特上看到你对武器的召唤,只是来看看.: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)