読者です 読者をやめる 読者になる 読者になる

D言語のテンプレートで FizzBuzz

D言語を少し触ってみたので.

import std.conv;

template fizzbuzz(int n)
{
    static if (n == 0) {
        immutable string fizzbuzz = "";
    } else {
        immutable string fizzbuzz = fizzbuzz!(n-1) ~ (
                                                        n%15 == 0 ? "FizzBuzz" :
                                                        n%3  == 0 ? "Fizz" :
                                                        n%5  == 0 ? "Buzz" :
                                                        to!string(n)
                                                     ) ~ "\n";
    }
}

import std.stdio;

void main()
{
    writeln( fizzbuzz!(100) );
}

コンパイル時に普通に文字列を扱えるのと,static if のおかげでかなり分かりやすく簡潔に書けますね.
( C++: 2011-10-02 - sorry, unimplemented: )