过滤Haskell中列表列表中的元素

Sha*_*dol 1 haskell list filter

我建立了这个结构的列表:

[(Interger, Double)]
Run Code Online (Sandbox Code Playgroud)

List是通过在整数列表上使用zip和一个完全相同大小的双打列表创建的.

现在我想过滤<18.5或> 25的双打列表.我遇到的问题是我无法访问双打在过滤功能中使用它们.

这可能很容易,但我是这种语言的血腥菜鸟.我google了很多,并阅读了其他一些线程,但我没有找到答案.

我有:

filter (<18.5) listexpression
Run Code Online (Sandbox Code Playgroud)

所以我正在努力的是那种倾听.如果它是单个值的列表,那很容易.我可以在压缩之前进行过滤,但之后我无法再将已过滤列表中的数据连接到其他未过滤的列表.

编辑:我忘了提.这是一张工作表.我们被要求自己构建过滤器和映射函数,不允许对基本Haskell使用任何添加.意思是不允许进口.

Ami*_*ory 5

你可以这样做:

Prelude> filter (\p -> (snd p) < 18.5 || (snd p) > 25) [(1, 2.3), (1, 20.0)]
[(1,2.3)]
Run Code Online (Sandbox Code Playgroud)

lambda函数传递给filter,即

(\p -> (snd p) < 18.5 || (snd p) > 25)
Run Code Online (Sandbox Code Playgroud)

说,对于每一个p,第二个元素p必须小于18.5或超过25.


或者,你可以像这样写

Prelude> filter (\(_, f) -> f < 18.5 || f > 25) [(1, 2.3), (1, 20.0)]
[(1,2.3)]
Run Code Online (Sandbox Code Playgroud)

这里的函数表明,对于第一个值无关紧要且第二个值无关的任何对f,f必须小于18.5或大于25.