J'écris quelques extensions pour imiter la carte et réduire les fonctions en Lisp.Generic Map/Réduire les extensions de liste en C#
public delegate R ReduceFunction<T,R>(T t, R previous);
public delegate void TransformFunction<T>(T t, params object[] args);
public static R Reduce<T,R>(this List<T> list, ReduceFunction<T,R> r, R initial)
{
var aggregate = initial;
foreach(var t in list)
aggregate = r(t,aggregate);
return aggregate;
}
public static void Transform<T>(this List<T> list, TransformFunction<T> f, params object [] args)
{
foreach(var t in list)
f(t,args);
}
La fonction de transformation réduire cochonneries comme:
foreach(var t in list)
if(conditions && moreconditions)
//do work etc
Est-ce que ce sens? Pourrait-il être meilleur?
Cela existe déjà. Jetez un oeil à C# 3/LINQ. – yfeldblum
Oui, cela a du sens. Les réponses à cette question et à plusieurs autres montrent un * étonnant * manque de compréhension de ce qu'est une fonction de réduction. Oui, le type de sortie est supposé être indépendant du type d'entrée. 'Aggregate' n'est pas une fonction de réduction, comme beaucoup de gens l'ont prétendu. Peut-être que c'est pourquoi ils l'ont appelé quelque chose de différent. – harpo