Является ли C # Enumerable.Reverse (). Aggregate (initval, func) истинным правым сгибом? - PullRequest
2 голосов
/ 08 декабря 2010

Википедия говорит, что Reverse().Aggregate(initval, func) - это фолд право.Это звучит так, как будто это неправда, скорее дешевый полицейский ... Кто-нибудь может прокомментировать этот вопрос?У C # есть правильные сгибы?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2010

Возьмите определение правой складки и проверьте, подходит ли ей Reverse().Aggregate(initval, func).

Определение:

Объединение первого элемента с результатами объединения остальных называется правомсложите

Так что если вы хотите вычислить сумму (1, 2, 3).Если вы просто Aggregate, оценка будет (1 + 2) + 3.Если вы Reverse().Aggregate, то это будет (3 + 2) + 1, что идеально соответствует определению.

Вопрос может заключаться в том, эффективен ли он, потому что Reverse - это дорогостоящая операция, но функционально это идеальное правильное сгибание.

0 голосов
/ 08 декабря 2010

Aggregate - это истинный левый сгиб.Агрегирование обратного списка имеет ту же семантику, что и полное (не ленивое) правое свертывание в любом обратимом списке.

...