我必须创建一个函数,该函数接收数字和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
答案 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
这不是解决此问题的最佳方法,但有时会派上用场。