Function tuples
John Colvin
john.loughran.colvin at gmail.com
Fri Mar 14 10:12:58 PDT 2014
On Friday, 14 March 2014 at 17:10:53 UTC, John Colvin wrote:
> 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#D
>>
>>
>> import 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
It's calling sin every time instead of cos or cube
More information about the Digitalmars-d-learn
mailing list