Strange Loop 2012
bearophile
bearophileHUGS at lycos.com
Tue Oct 16 19:54:59 PDT 2012
> https://raw.github.com/psnively/types_vs_tests/master/src/main/scala/Shapeless.scala
If this is equivalent, then in D it was too much easy:
import std.typetuple: allSatisfy, staticIndexOf;
struct Digit(size_t N) { enum uint n = N; }
// No "static foreach", so:
alias Digit!0 _0;
alias Digit!1 _1;
alias Digit!2 _2;
alias Digit!3 _3;
alias Digit!4 _4;
alias Digit!5 _5;
alias Digit!6 _6;
alias Digit!7 _7;
alias Digit!8 _8;
alias Digit!9 _9;
template isDigit(alias T) {
enum isDigit = staticIndexOf!(T,
_0,_1,_2,_3,_4,_5,_6,_7,_8,_9) != -1;
}
bool isValid(Digits...)() {
static if (Digits.length != 9 || !allSatisfy!(isDigit,
Digits))
return false;
else {
uint total = 0;
/*static*/ foreach (i, Dig; Digits)
total += (9 - i) * Dig.n;
return total % 11 == 0;
}
}
void main() {
static assert(!isValid!(_0, _1)());
static assert( isValid!(_3, _4, _5, _8, _8, _2, _8, _6,
_5)());
static assert( isValid!(_1, _2, _3, _4, _5, _6, _7, _8,
_9)());
static assert(!isValid!(_3, _1, _5, _8, _8, _2, _8, _6,
_5)());
static assert(!isValid!(_3, _4, _5, _8, _8, _2, _8, _6)());
}
Bye,
bearophile
More information about the Digitalmars-d
mailing list