Haskell では、演算子の初期値foldl
は明らかに必須です
Prelude> foldl (+) 0 [1]
1
Prelude> foldl (+) 0 []
0
Prelude> :t foldl
(a -> b -> a) -> a -> [b] -> a
しかし、reduce 関数 (またはfunctools.reduce
) では、初期値はオプションです。
reduce(function, sequence[, initial]) -> value
初期値が必要になるのは、シーケンスが空の場合のみです。これは、haskell の動作と一致しています。Pythonreduce
では、シーケンスのサイズが 1 であると想定しています。次に、これらのコーナーケースを内部で処理しますか?
>> reduce(operator.sub, [1])
1
>> reduce(operator.mul, [1])
1
>> reduce(operator.add, [1])
1