C言語でScheme風オレオレ言語

なんかオレオレ言語が流行ってるみたいなので、参加してみる。

#include <stdio.h>
#include <stdlib.h>

#define define(ret, name, args, block) \
    ret name args { return block; }

#define if(expr, block1, block2) expr ? block1 : block2
#define eq(a, b) a == b
#define sub(a, b) a - b
#define scale(a, b) a * b

define(int, fact, (int n),
        if(eq(n, 0),
            1,
            scale(n, fact(sub(n, 1)))))

define(int, main, (void),
        (printf("%d", fact(10)), EXIT_SUCCESS))

文法は、関数(引数,引数,・・・)

関数の宣言はdefine(型、関数名、(引数リスト), (関数,関数・・・))。最後の関数の評価が戻り値となります。また、関数が1つだけなら、括弧を省略することが可能です。

SchemeC言語ならセミコロンの無いC言語が実現出来ます。日頃から演算子の優先順位なんてイラナイ。再帰ラブ。なんて思ってる人には最適な言語となるはずです。C言語をシンプルに書くことが出来るようになるでしょう。