2013-03-26 107 views
4

这可能是一个相当明显的问题,但我无法弄清楚。Haskell均匀函数?

我想写一个函数,将偶数编号在列表中。当我尝试运行它时,出现关于使用偶函数的错误。我怎样才能解决这个问题?

squareEvens n = [ns * ns | ns <- n, even ns] 

但是请注意,该公约是用复数来命名列表和奇异的名字从该列表中的元素:如果你改变even neven ns

module SquareEvens where 

squareEvens :: [Integer] -> [Integer] 

squareEvens n = [ns * ns | ns <- n, even n] 
+5

如果你把'even n'改成'even ns' – 2013-03-26 03:46:23

+0

yep!它固定它groovy!哇,呃。 – 2013-03-26 03:52:26

+21

在一个不相关的说明中,按照惯例'ns'通常表示一个列表,'n'表示该列表中的一个元素。你可能会考虑切换你的'n'和'ns'以遵循常见的Haskell用法。 – kputnam 2013-03-26 04:12:48

回答

11

的代码工作正常。所以交换nns遵循惯用哈斯克尔用法:

squareEvens ns = [n * n | n <- ns, even n] 
7

正如你所看到的,很容易得到错误的变量名。那么,为什么不这样做呢?

squareEvens = map (^2) . filter even 

我觉得这比理解更清晰。你可以从右到左阅读:只保留偶数,然后将它们平方。