繁体   English   中英

如何使用 Haskell 中的过滤器功能?

[英]How do I use the filter function in Haskell?

我有一个 haskell 程序,可以根据输入 n 列出 [1..n] 中的所有整数。 我想根据其中的条件过滤某些数字并显示为列表。 我在哪里以及如何使用过滤器功能/条件?

根据haskell文档:

filter :: (a -> Bool) -> [a] -> [a]

过滤器,应用于谓词和列表,返回满足谓词的那些元素的列表; IE,

filter p xs = [ x | x <- xs, p x]

你明白了,差不多。 所以剩下的事情就是为你的列表设计谓词函数。 假设您已经有一个名为 xs 的列表和一个谓词函数 p,您所要做的就是

filter p xs

通常,您会看到 p 被定义为匿名或 lambda 表达式,如下所示:

filter (\n -> n `mod` 2 == 0) xs

这不是必需的,作为初学者定义命名函数可能会有所帮助。

isEven n = n `mod` 2 == 0

evenListNumbers xs = filter isEven xs

evenListNumbers [1,2,3,4]

这是[2,4]

因此,给定列表过滤器的谓词函数接受一个列表元素并返回一个布尔值。 如果为真,则保留该元素(或添加到结果列表中),如果为假,则将其传递。

好吧,您将该条件转换为谓词(返回Bool的函数)并使用它来过滤数字。

例如,如果您必须只选择奇数,您可以使用filter odd [1..n]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM