4

これはおそらくかなり明白な質問ですが、私はそれを理解することができません。

リスト内の偶数を二乗する関数を書こうとしています。実行しようとすると、even関数の使用に関してエラーが発生します。どうすればこれを修正できますか?

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 に答える