我有一个haskell程序,根据输入n列出[1..n]中的所有整数。 我想根据条件过滤某些数字并显示为列表。我在哪里以及如何使用过滤功能/条件?
根据haskell文件:
filter :: (a -> Bool) -> [a] -> [a]
filter,应用于谓词和列表,返回满足谓词的那些元素的列表;即,
filter p xs = [ x | x <- xs, p x]
答案 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]