July 05, 2008 problem with the variadic template | ||||
|---|---|---|---|---|
| ||||
Hello
I want to write "map" function with the Common Lisp "mapcar" behaviour. But i don't understand how to write one template for the N-argument delegate.
This is how it works now:
T[] map(T, T1)(T delegate(T1) fun, T1[] xs) {
T[] result; result.length = xs.length;
foreach (i,x; xs)
{
result[i] = fun(x);
}
return result;
}
T[] map(T,T1,T2)(T delegate(T1, T2) fun, T1[] xs, T2[] ys) {
T[] result; result.length = reduce!(min)(xs.length,[ys.length]);
for (int i = 0; i<result.length; ++i)
{
result[i] = fun(xs[i], ys[i]);
}
return result;
}
How can i improve the code?
Thank you
| ||||
July 05, 2008 Re: problem with the variadic template | ||||
|---|---|---|---|---|
| ||||
Posted in reply to baleog | On Sun, 06 Jul 2008 02:19:09 +0400, baleog <maccarka@yahoo.com> wrote: > Hello > I want to write "map" function with the Common Lisp "mapcar" behaviour. But i don't understand how to write one template for the N-argument delegate. > This is how it works now: > > T[] map(T, T1)(T delegate(T1) fun, T1[] xs) { > T[] result; result.length = xs.length; > foreach (i,x; xs) > { > result[i] = fun(x); > } > return result; > } > T[] map(T,T1,T2)(T delegate(T1, T2) fun, T1[] xs, T2[] ys) { > T[] result; result.length = reduce!(min)(xs.length,[ys.length]); > for (int i = 0; i<result.length; ++i) > { > result[i] = fun(xs[i], ys[i]); > } > return result; > } > > How can i improve the code? > > Thank you There already exists a map function in D2, see std.algorithm (http://www.digitalmars.com/d/2.0/phobos/std_algorithm.html), take a loop at it. | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply