On Friday, 14 March 2014 at 16:38:00 UTC, bearophile wrote:
This comes from a Rosettacode entry: http://rosettacode.org/wiki/First-class_functions#Dimport std.stdio, std.math, std.typetuple, std.functional; enum static sin = (in real x) pure nothrow => std.math.sin(x), asin = (in real x) pure nothrow => std.math.asin(x), cos = (in real x) pure nothrow => std.math.cos(x), acos = (in real x) pure nothrow => std.math.acos(x), cube = (in real x) pure nothrow => x ^^ 3,cbrt = (in real x) /*pure*/ nothrow => std.math.cbrt(x);void main() { alias dir = TypeTuple!(sin, cos, cube); alias inv = TypeTuple!(asin, acos, cbrt); foreach (immutable i, f; dir) { writefln("%6.3f %6.3f", compose!(f, inv[i])(0.5), compose!(dir[i], inv[i])(0.5)); } } It prints: 0.500 0.500 0.866 0.500 0.713 0.500 Do you know why there's such difference in the results?
It's a bug, and quite a wierd one at that. See the output from this: http://dpaste.dzfl.pl/1962d61bb185
(You can't define a staticZip in D?)
You can. I hope it will end up in in std.meta, along with a whole load of other such goodies that I've been working on :)
