using System.Collections.Generic;
Enumerable.Range(0,100).Fold(0, x => x+1 ).ToString()
Enumerable.Range(1,100).FoldBack(1, x => x + x*x ).ToString()
public static IEnumerable<T> Tail<T>(this IEnumerable<T> self)
public static T Head<T>(this IEnumerable<T> self)
public static U Fold<T, U>(this IEnumerable<T> self, U state, Func<T, U, U> func)
foreach (var item in self)
state = func(self.Head(), state);
public static U Fold<T, U>(this IEnumerable<T> self, U state, Func<U, U> func)
foreach (var item in self)
public static U FoldBack<T, U>(this IEnumerable<T> self, U state, Func<T, U, U> func)
foreach (var item in self.Reverse())
state = func(self.Head(), state);
public static U FoldBack<T, U>(this IEnumerable<T> self, U state, Func<U, U> func)
foreach (var item in self.Reverse())