Up

closures.d

 1 import std.stdio;
 2 
 3 alias double delegate(double) fn;
 4 
 5 fn derivative(fn f, double dx) {
 6     double deriv(double x) {
 7       return (f(x + dx) - f(x)) / dx;
 8     };
 9     return &deriv;
10 }
11 
12 void main() {
13     double xcubed(double x) {
14       return x*x*x;
15     }
16  
17     fn f = &xcubed;
18     auto df = derivative(f, 0.01); 
19     writefln(df(1.0));
20     auto ddf = derivative(df, 0.01); 
21     writefln(ddf(1.0));
22 }