gpt4 book ai didi

Erlang 列表过滤器语法

转载 作者:行者123 更新时间:2023-12-04 22:15:28 30 4
gpt4 key购买 nike

我正在尝试编写一些 Erlang 来过滤以下形式的数组:

[{dakota, "cold and snowy"}, {california, "perfect weather"}] % and so on

这就是我所拥有的 - 当我尝试从 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]).

任何人都可以发现我的语法有问题吗?

最佳答案

我在推特上看到了你的号召,只好过来看看。 :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]).

您也可以稍微清理一下,除非这是您自己进行字符串匹配的练习。 string 模块有 str(String, SubString) -> Index 和 rstr(String, SubString) -> Index,它们在 Erlang Manual 中被这样描述。 :

返回第一次/最后一次出现的 SubString 在 String 中开始的位置。如果 String 中不存在 SubString,则返回 0。例如:
> string:str(" Hello Hello World World ", "Hello World").
8

使用它可以稍微整理一下,你甚至可以将整个东西缩短成一个衬里。列表理解是不必要的,因为数据已经采用您尝试输入的格式。
-module(matcher).
-export([findkeywords/2]).

findkeywords(Word, Arr) ->
lists:filter(fun({_Key, Desc}) -> string:str(Desc, Word) > 0 end, Arr).

关于Erlang 列表过滤器语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8117478/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com