D for Haskeller

http://haskell.g.hatena.ne.jp/mr_konn/20061006/1160138831
勿論すごい人の真似な訳ですが。
C++よりDのほうが優れているんだと主張したいので書きます。
対象読者は、ネタをネタと見抜ける人です。
とりあえず「こちら」と比較しながら読みましょう。


まずは変数。なんとDにはC++にはない型推論があります。

const n = 10;

これでnは整数型と推論されます。素晴らしい。


次に連想配列。ブレースの後の「;」とstaticを書かなくていい、という点でC++よりも書きやすくなっています。

struct AssocArray{
    const n = 10;
    const m = n+10;
    const b = true;
}

こんな感じで使います。「::」よりも「.」の方が勿論1byte分優れていますよね。

const z = AssocArray.n + AssocArray.m;


別の名前に束縛する時は、aliasを使います。typedefよりも2byteも短いです。

alias AssocArray AssocArray2;


そして関数。これが素晴らしいです。なんとDの関数は連想配列以外の型も返せます。

template add_int(int n, int m){
    const add_int = n + m;
}

関数呼び出しは以下のようにして行います。

const n = 10;
const m = 20;
const o = add_int!(n, m);

「!(...)」という形式は見慣れていないかも知れませんが、しかし「<...>」よりは関数を呼び出している、という感じがするのではないでしょうか。
何より、C++形式では関数の引数に関数の返値を渡してやるときに、

add_int<3, add_int<1,2> >; // >と>の間にスペースが必要!

といった問題がありますが、Dではそのような問題はありません。Dは完璧超絶言語です。
では早速、関数の書き方について説明します。

template       // 関数であることを示すキーワード
(int n, int m) // 引数は n::int, m::int のふたつ
add_int        // 関数名
{
const add_int  // 必ず関数名と同じ名を持つ変数を作り
= n+m;         // そこに関数の戻り値を代入します
}

非常に直感的で、実に分かりやすいですね。素晴らしいです。嗚呼。
勿論パターンマッチも使えます。

template add_int(int n, int m){ const add_int = n + m; }
template add_int(int n : 10, int m : 10){ const add_int = 40; }

引数の後ろに「:」をつけて、その後に値を書いてやるだけ!これもC++より理解しやすくて優れていますね。
そして階乗計算。

template fact(int n){ const fact = fact!(n-1) * n; }
template fact(int n : 1){ const fact = 1; }

美しい…


そして最後はHello Worldです。

void main(){
	printf("Hello World.\n");
}

わーい、やったね!


続け(お願いします)