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つだけなら、括弧を省略することが可能です。
Scheme風C言語ならセミコロンの無いC言語が実現出来ます。日頃から演算子の優先順位なんてイラナイ。再帰ラブ。なんて思ってる人には最適な言語となるはずです。C言語をシンプルに書くことが出来るようになるでしょう。