在Haskell中映射和过滤

gdr*_*les 2 dictionary haskell function filter

我有两个元组列表如下:[(String,Integer)][(Float,Integer)].每个列表都有几个元组.

对于在第二个列表Integer中具有a的每个Float,我需要检查它是否IntegerInteger第一个列表中的匹配,如果匹配,则返回String- 尽管此函数需要返回Strings 列表,即[String]包含所有结果.

我已经定义了一个函数,它返回Integer第二个列表中的s列表(用于比较第一个列表中的整数).

这应该可以使用"高阶函数"来解决.我花了很多时间摆弄相当量mapfilter但还没有找到一个解决方案!

Tik*_*vis 6

您有Integers第二个列表中的列表.我们称之为ints.

现在你需要做两件事 - 首先,过滤(String, Integer)列表,使它只包含ints列表中对应整数的对,然后,将此列表转换为一个列表String.

这两个步骤分别对应于filtermap.

首先,您需要一个过滤功能.(String, Integer)如果整数在ints列表中,则此函数应该成对并返回.所以它应该有一种类型:

check :: (String, Integer) -> Bool
Run Code Online (Sandbox Code Playgroud)

写这个不应该太难.获得后,您可以通过它过滤第一个列表.

接下来,您需要一个函数将一(String, Integer)对转换为一个String.这将有类型:

extract :: (String, Integer) -> String
Run Code Online (Sandbox Code Playgroud)

这也应该很容易写.(这样的标准函数实际上存在,但是如果你只是在学习它自己弄清楚它是健康的.)然后你需要将这个函数映射到前一个过滤器的结果上.

我希望这能为您提供足够的提示,让您自己获得解决方案.