On Aug 18, 10 14:41, F. Almeida wrote:
It is an excellent feature of D2 that one can do

double a[];
double b[];
double c[];

//...

c = a[] + 2.0*b[];

But this is still limited, as we cannot include function calls in
these operations.

What if the compiler was able to introduce them in the assignment
loop, provided that the functions pass ref double (in this case)?

double anyfun(ref double x) { ... }

c = anyfun(a[]) + 2.0*b[];

import std.algorithm;
import std.stdio;
import std.array;

auto vectorize(alias f, U)(U a) {
        return array(map!f(a));
}

double square(double x) {
        return x*x;
}

void main () {
  auto a = [1.0, 2.0, 3.0, 4.0];
  auto b = [5.0, 6.0, 7.0, 8.0];

  auto c = [0.0, 0.0, 0.0, 0.0];
  c[] = vectorize!square(a)[] + 2.0 * b[];

  writeln(">", c);
}

Reply via email to