Обратите внимание на следующее:
In [214]: l = [None,None,None]
In [215]: reduce(lambda x,y: x== y, l)
Out[215]: False
In [216]: from functional import scanl
In [217]: scanl(lambda x,y: x== y, None, l)
Out[217]: <generator object _scanl at 0x0000000005770D38>
In [218]: list(scanl(lambda x,y: x== y, None, l))
Out[218]: [None, True, False, False]
scanl
показывает промежуточные результаты, начиная с начального элемента.Происходит следующее: сначала возвращается инициал, затем результат None == None
(True
), затем True == None
(False
), затем до конца False == None
(False
).
Функция Reduce сравнивает результат последнего вычисления со следующим элементом в последовательности.