これはおそらくかなり明白な質問ですが、私はそれを理解することができません。
リスト内の偶数を二乗する関数を書こうとしています。実行しようとすると、even関数の使用に関してエラーが発生します。どうすればこれを修正できますか?
module SquareEvens where
squareEvens :: [Integer] -> [Integer]
squareEvens n = [ns * ns | ns <- n, even n]
これはおそらくかなり明白な質問ですが、私はそれを理解することができません。
リスト内の偶数を二乗する関数を書こうとしています。実行しようとすると、even関数の使用に関してエラーが発生します。どうすればこれを修正できますか?
module SquareEvens where
squareEvens :: [Integer] -> [Integer]
squareEvens n = [ns * ns | ns <- n, even n]
even n
次のように変更すると、コードは正常に機能しeven ns
ます。
squareEvens n = [ns * ns | ns <- n, even ns]
ただし、規則では、複数形を使用してリストに名前を付け、単数形を使用してそのリストの要素に名前を付けることに注意してください。したがって、交換n
しns
て、慣用的なHaskellの使用法に従うようにします。
squareEvens ns = [n * n | n <- ns, even n]
ご覧のとおり、変数名を間違えるのは簡単です。では、それなしでやってみませんか?
squareEvens = map (^2) . filter even
これは理解よりも明確だと思います。あなたはそれを右から左に読むことができます:偶数だけを保持し、次にそれらを二乗します。