[英]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.