using System.Collections.Generic;
public static void Main()
var nums = new[] { 1, 2, 3, 6, 7, 12, 21, 55 };
x => y => (double)x + y);
public static class Extensions
public static Func<TResult, TResult> ReduceFromSeed<T, TResult>(
this IEnumerable<T> source,
Func<T, Func<TResult, TResult>> reduce)
return (TResult _seed) =>
foreach(var item in source)
Console.WriteLine(result);
result = reduce(item)(result);
public static TResult Reduce<T, TResult>(
this IEnumerable<T> source,
Func<T, Func<TResult, TResult>> reduce)
return source.Skip(1).ReduceFromSeed(reduce)(source.First());
public static TResult Reduce2<T, TResult>(
this IEnumerable<T> source,
Func<T, TResult> convert,
Func<T, Func<TResult, TResult>> reduce)
return source.Skip(1).ReduceFromSeed(reduce)(convert(source.First()));