codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include<stdio.h> #define PP_INC_0 1 #define PP_INC_1 2 #define PP_INC_2 3 #define PP_INC_3 4 #define PP_INC_4 5 #define PP_INC_5 6 #define PP_INC_6 7 #define PP_INC_7 8 #define PP_INC_8 8 #define PP_INC(n) PP_INC_I(n) #define PP_INC_I(n) PP_INC_ ## n #define PP_DEC_0 0 #define PP_DEC_1 0 #define PP_DEC_2 1 #define PP_DEC_3 2 #define PP_DEC_4 3 #define PP_DEC_5 4 #define PP_DEC_6 5 #define PP_DEC_7 6 #define PP_DEC_8 7 #define PP_DEC(n) PP_DEC_I(n) #define PP_DEC_I(n) PP_DEC_ ## n #define PP_IF_0(t, f) f #define PP_IF_1(t, f) t #define PP_IF(c, t, f) PP_IF_I(c, t, f) #define PP_IF_I(c, t, f) PP_IF_ ## c (t, f) #define PP_BOOL_0 0 #define PP_BOOL_1 1 #define PP_BOOL_2 1 #define PP_BOOL_3 1 #define PP_BOOL_4 1 #define PP_BOOL_5 1 #define PP_BOOL_6 1 #define PP_BOOL_7 1 #define PP_BOOL_8 1 #define PP_BOOL(n) PP_BOOL_I(n) #define PP_BOOL_I(n) PP_BOOL_ ## n #define PP_TUPLE_ELEM_1_0(a) a #define PP_TUPLE_ELEM_2_0(a, b) a #define PP_TUPLE_ELEM_2_1(a, b) b #define PP_TUPLE_ELEM_3_0(a, b, c) a #define PP_TUPLE_ELEM_3_1(a, b, c) b #define PP_TUPLE_ELEM_3_2(a, b, c) c #define PP_TUPLE_ELEM(n, i, tup) PP_TUPLE_ELEM_I(n, i, tup) #define PP_TUPLE_ELEM_I(n, i, tup) PP_TUPLE_ELEM_II(PP_TUPLE_ELEM_ ## n ## _ ## i tup) #define PP_TUPLE_ELEM_II(a) a #define PP_EXP_REC_0(f, v) f(v) #define PP_EXP_REC_1(f, v) PP_EXP_REC_0(f, PP_EXP_REC_0(f, v)) #define PP_EXP_REC_2(f, v) PP_EXP_REC_1(f, PP_EXP_REC_1(f, v)) #define PP_EXP_REC_3(f, v) PP_EXP_REC_2(f, PP_EXP_REC_2(f, v)) #define PP_EXP_REC_4(f, v) PP_EXP_REC_3(f, PP_EXP_REC_3(f, v)) #define PP_EXP_REC_5(f, v) PP_EXP_REC_4(f, PP_EXP_REC_4(f, v)) #define PP_EXP_REC_6(f, v) PP_EXP_REC_5(f, PP_EXP_REC_5(f, v)) #define PP_EXP_REC_7(f, v) PP_EXP_REC_6(f, PP_EXP_REC_6(f, v)) #define PP_EXP_REC_8(f, v) PP_EXP_REC_7(f, PP_EXP_REC_7(f, v)) #define PP_EXP_REC_9(f, v) PP_EXP_REC_8(f, PP_EXP_REC_8(f, v)) #define PP_EXP_REC_10(f, v) PP_EXP_REC_9(f, PP_EXP_REC_9(f, v)) #define PP_EXP_REC(exp, f, v) PP_EXP_REC_I(exp, f, v) #define PP_EXP_REC_I(exp, f, v) PP_EXP_REC_ ## exp (f, v) #define PP_WHILE(p, f, v) PP_TUPLE_ELEM(3, 2, PP_EXP_REC(10, PP_WHILE_I, (p, f, v))) #define PP_WHILE_I(pfv) PP_WHILE_II pfv #define PP_WHILE_II(p, f, v) (p, f, PP_IF(p(v), f(v), v)) #define PP_ADD(m, n) PP_TUPLE_ELEM(2, 1, PP_WHILE(PP_ADD_P, PP_ADD_L, (m, n))) #define PP_ADD_P(mn) PP_BOOL(PP_TUPLE_ELEM(2, 0, mn)) #define PP_ADD_L(mn) PP_ADD_L_I mn #define PP_ADD_L_I(m, n) (PP_DEC(m), PP_INC(n)) #define PP_TO_STR(a) PP_TO_STR_I(a) #define PP_TO_STR_I(a) PP_TO_STR_II(a) #define PP_TO_STR_II(a) #a main() { printf("%s", PP_TO_STR(PP_ADD(PP_ADD(3, 1), 2))); return 0; }
Private
[
?
]
Run code
Submit