私は Haskell をいじっていましたが、これら 2 つの関数のパフォーマンスに違いがあるかどうか疑問に思いました。
count :: (Eq a) => [a] -> a -> Int
count xs e = foldr countCheck 0 xs
where countCheck x
| x == e = (1+)
| otherwise = (0+)
count' :: (Eq a) => [a] -> a -> Int
count' xs e = foldr countCheck 0 xs
where countCheck x acc
| x == e = acc + 1
| otherwise = acc
ベンチマークとして次のコードを試してみました: main = print (count [1..10000] 1)
、その結果、最初の (部分的に適用された を使用した+
) 関数が平均してわずかに高速になりました。
私が主に疑問に思ったのは、私にとってcount
は、count'
. 「賢い」ということ以外に、もう 1 つのトレードオフは高速であることだと思いました。では、部分的に適用された関数を使用すると、コードの実行が速くなるでしょうか? もしそうなら、なぜですか?