C for Haskeller

http://d.hatena.ne.jp/w_o/20061008#p1
http://d.hatena.ne.jp/niha/20061008#1160319491

勿論すごい人の以下略。Haskellから入った人には、ポインタとか以下略。対象読者は以下略。

Cとは、以下のような特徴を持ったプログラミング言語です

  • 参照透明(!)
  • 型推論(!!)
  • 遅延評価(!!!)
  • 限定的にパターンマッチできる
  • 全く直感的でない構文
  • IOモナドを書くための大量のsyntax sugarがある

説明していくと長くなるので以下略。
Cには、次の型があります。

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

#define n 10

この時点でわかる人にはオチが見えたと思いますので、壮絶に飛ばします。この時点でfor Haskellerのつもりが無いことはばれているわけでいすが補足しておくと「限定的にパターンマッチ」はsizeof##その他諸々のことです。関数はインラインで書ける場合もありますが、一定以上複雑な場合はファイルに記述し呼び出すには#includeと書きます。
(ここに大量の説明があるつもり以下略)
さて、(実際には何も書いてませんが)Cの機能をひととおり理解していただけたでしょうか。
これらの機能は、Boostのような奇っ怪なものではなく、標準ライブラリのtgmath.hなどで実際に使われています。
以上の知識の応用として、Hello Worldを書いてみましょう。
Hello Worldは次のように書けます↓

#include <stdio.h>
int main() { fputs("Hello World.\n", stdout); }

デフォルトでは遅延評価が働き、なかなか文字列が出力されなかったりしますので、最後の\nは評価タイミングを固定するために必要です。