using System.Collections.Generic;
public static void Main()
List<int> numbers = new List<int> { 1, 2, 3 };
List<int> incrementedNumbers = Map(numbers, x => x + 1);
Console.WriteLine(string.Join(",", incrementedNumbers));
List<string> stringNumbers = Map(numbers, x => x.ToString());
Console.WriteLine(string.Join(",", stringNumbers));
List<int> emptyList = new List<int>();
List<int> emptyResult = Map(emptyList, x => x * 2);
Console.WriteLine(emptyResult.Count);
int sum = Fold(numbers, 0, (acc, item) => acc + item);
string concatenated = Fold(numbers, "", (acc, item) => acc + item.ToString());
Console.WriteLine(concatenated);
int result = Fold(emptyList, initial, (acc, item) => acc * item);
Console.WriteLine(result);
List<int> mappedNumbers = Map2(numbers, x => x + 1);
Console.WriteLine(string.Join(",", mappedNumbers));
List<string> mappedStringNumbers = Map2(numbers, x => x.ToString());
Console.WriteLine(string.Join(",", mappedStringNumbers));
List<int> mappedEmptyList = Map2(emptyList, x => x * 2);
Console.WriteLine(mappedEmptyList.Count);
public static List<B> Map<A, B>(List<A> list, Func<A, B> f)
List<B> result = new List<B>();
B transformedItem = f(item);
result.Add(transformedItem);
public static B Fold<A, B>(List<A> list, B initial, Func<B, A, B> folder)
state = folder(state, item);
public static List<B> Map2<A, B>(List<A> list, Func<A, B> f)
return Fold(list, new List<B>(), (acc, item) =>