public static Expr Map(this Expr expr, Func <Expr, Expr> f) { Debug.Assert(f != null); if (expr == null) { return(f(null)); } Expr result = null; Expr tail = null; foreach (Expr item in expr.ToEnumerable()) { Expr mappedItem = f(item); ExprFactory.AppendItemToList(mappedItem, ref result, ref tail); } return(result); }