История изменений
Исправление Virtuos86, (текущая версия) :
Я напутал.
Редуктор (по-русски это правильнее, чем «редьюсер») — это функция, вычисление, которым оперирует свёртка. Свёртка является функциональным аналогом цикла с аккумулирующей переменной, которая накапливает промежуточные результаты, а на выходе даёт итоговый результат, так? Тогда редуктором будет тело цикла как особое вычисление, которое должно результат своей работы помещать в аккумулирующую переменную. Но в функциональном мире нет изменяемого состояния, поэтому появляется такое ограничение, что функция-редуктор должна принимать промежуточный результат и возвращать его (в измененном виде) — это будет аналогом аккумулирующей переменной. То есть типовой редуктор имеет вид:
def reducer(accum_res, i):
res = ...
update_accum_res(accum_res, res)
return accum_res
Трансдьюсер, трансдуктор, transducer, TRANSform reDUSERs, по тому, что я изучил, выглядит изобретением велосипеда. По сути это обычный питоний декоратор, но особого рода. Проще всего показать на грубом схематичном примере:
def transducer(reducer):
def inner(reducer1):
def inner1(reducer2):
...
def innerN(reducerN+1, i):
res = reducerN+1(reducerN(...(reducer(init, i))))
return res
return innerN
...
return inner1
return inner
В ФП декораторы, кстати, успешно заменяются каррированными функциями. И в каком-нибудь хаскелле такие вещи, вполне возможно, вообще тривиальны).
Исходная версия Virtuos86, :
Я напутал.
Редуктор — это функция, вычисление, которым оперирует свёртка. Свёртка является функциональным аналогом цикла с аккумулирующей переменной, которая накапливает промежуточные результаты, а на выходе даёт итоговый результат, так? Тогда редуктором (по-русски это правильнее, чем «редьюсер») будет тело цикла как особое вычисление, которое должно результат своей работы помещать в аккумулирующую переменную. Но в функциональном мире нет изменяемого состояния, поэтому появляется такое ограничение, что функция-редуктор должна принимать промежуточный результат и возвращать его (в измененном виде) — это будет аналогом аккумулирующей переменной. То есть типовой редуктор имеет вид:
def reducer(accum_res, i):
res = ...
update_accum_res(accum_res, res)
return accum_res
Трансдьюсер, трансдуктор, transducer, TRANSform reDUSERs, по тому, что я изучил, выглядит изобретением велосипеда. По сути это обычный питоний декоратор, но особого рода. Проще всего показать на грубом схематичном примере:
def transducer(reducer):
def inner(reducer1):
def inner1(reducer2):
...
def innerN(reducerN+1, i):
res = reducerN+1(reducerN(...(reducer(init, i))))
return res
return innerN
...
return inner1
return inner
В ФП декораторы, кстати, успешно заменяются каррированными функциями. И в каком-нибудь хаскелле такие вещи, вполне возможно, вообще тривиальны).