// File: Hof.cs // Author: David Bergman // // This file implements a mini framework for higher-order // functions that I implemented during a seminar at Lab49 using System.Collections.Generic; public class Hof { public delegate R Fun1(A n); public delegate R Fun2(A1 a1, A2 a2); // This function adapter combines two functions. // This is called "function composition" in FP-land. public static Fun1 Comp( Fun1 fun1, Fun1 fun2) { return delegate(T1 t) { return fun1(fun2(t)); } } public static void Transform(IEnumerable seq, IList dest, Fun1 fun ) { foreach (T1 t in seq) dest.Add(fun(t)); } public static T Accumulate(IEnumerable seq, T start, Fun2 fun) { T accum = start; foreach (T t in seq) accum = fun(accum, t); return accum; } }