如何在Haskell中使用过滤功能?

时间:2012-01-03 12:19:52

标签: function haskell

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

根据haskell文件:

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

filter,应用于谓词和列表,返回满足谓词的那些元素的列表;即,

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

2 个答案:

答案 0 :(得分:25)

你得到了它,差不多。因此,剩下的交易是为您的列表设计谓词函数。假设您已经有一个名为xs的列表和一个谓词函数p,那么您所要做的就是

  

过滤p xs。

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

  

过滤器(\ n - &gt; n`mod` 2 == 0)xs。

没有必要,作为初学者定义命名函数可能会有所帮助。

  

isEven n = n`mod` 2 == 0

     

evenListNumbers xs = filter isEven xs

     

evenListNumbers [1,2,3,4]

这是[2,4]。

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

答案 1 :(得分:2)

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

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