4

这可能是一个相当明显的问题,但我就是想不通。

我正在尝试编写一个对列表中的偶数进行平方的函数。当我尝试运行它时,我收到一个关于我使用偶数函数的错误。我怎样才能解决这个问题?

module SquareEvens where

squareEvens :: [Integer] -> [Integer]

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

2 回答 2

11

如果您更改even n为,代码可以正常工作even ns

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

但请注意,约定是使用复数来命名列表,使用单数来命名该列表中的元素。所以交换nns遵循惯用的 Haskell 用法:

squareEvens ns = [n * n | n <- ns, even n]
于 2013-03-26T09:27:22.467 回答
7

如您所见,变量名很容易出错。那么为什么不这样做呢?

squareEvens = map (^2) . filter even

我认为这比理解更清楚。您可以从右到左阅读:只保留偶数,然后将它们平方。

于 2013-03-26T12:15:38.817 回答