On 2015-02-11 at 01:56, bearophile wrote:
Alternative solution closer to the F# code:
import std.stdio, std.algorithm, std.typecons;
int f(T)(T t) if (isTuple!T) {
return t.predSwitch(
tuple(0, 0, 0), 0,
tuple(0, 1, 1), 0,
tuple(1, 0, 1), 0,
tuple(1, 1, 0), 0,
/*else*/ 1);
}
void main() {
foreach (immutable a; 0 .. 2)
foreach (immutable b; 0 .. 2)
foreach (immutable c; 0 .. 2)
writefln("%d xor %d xor %d = %d", a, b, c, tuple(a, b, c).f);
}
Why bend over and try to make it F#? Screw the F# guy.
He was cheating with a switch, so why can't we cheat?
foreach(i;0..8)writefln("%d xor %d xor %d =
%s",!!(i&4),!!(i&2),!!(i&1),"01101001"[i]);
Assimilate this!
Oh wait, you needed a function. OK, here's a function
(and just replace "01101001"[i] with xxor(i&4,i&2,i&1)):
int xxor(int a, int b, int c) {return
(a&&b&&c)||(!a&&!b&&c)||(!a&&b&&!c)||(a&&!b&&!c);}
If it makes him dislike D even more, great! Mission accomplished. :)