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

Amj*_*jad 15 haskell function

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

根据haskell文档:

filter :: (a -> Bool) -> [a] -> [a]
Run Code Online (Sandbox Code Playgroud)

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

filter p xs = [ x | x <- xs, p x]
Run Code Online (Sandbox Code Playgroud)

Sar*_*rah 25

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

过滤p xs.

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

过滤器(\n - > n`mod` 2 == 0)xs.

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

isEven n = n`mod` 2 == 0

evenListNumbers xs = filter isEven xs

evenListNumbers [1,2,3,4]

这是[2,4].

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