Haskell-给定列表中的返回数字大于n

时间:2018-11-06 21:56:35

标签: haskell

我必须创建一个函数,该函数接收数字和n的列表,并返回所有大于n的数字的列表。我想使用filter(> n)[x:xs],但不确定如何在函数foo中创建它。

示例:foo [1,2,3,4,5] 3返回[4,5]。

这是我所拥有的,但没有提供正确的输出。我觉得应该很简单。

foo n (x:xs)
| n x       = x : filter(>n) xs
| otherwise = foo f xs

3 个答案:

答案 0 :(得分:3)

保持简单:

foo n xs = filter (> n) xs

甚至

foo n = filter (> n)

(我们也可以走得更远,写foo = filter . (<),但由于我们正在处理混淆的代码,因此我不建议这样做。)

答案 1 :(得分:3)

您要混合使用无filter的定义(其中大部分重复filter的定义):

foo n [] = []
foo n (x:xs) | x > n     = x : foo n xs
             | otherwise =     foo n xs

filter周围加上薄薄的包装纸:

foo n xs = filter (> n) xs
-- foo n = filter (> n)
-- foo = filter . (<)

答案 2 :(得分:1)

这也可以使用折叠功能来完成。

foo n xs = foldl (\acc x-> if (x < n) then x:acc else acc) [] xs

这不是解决此问题的最佳方法,但有时会派上用场。