examples of 'worse is better' approach
#define car(a,args...) a
#define cdr(a,args...) args
#define cadr(args...) car(cdr(args))
#define append(args...) (args)
#define apply(func,args...) func(args)
#define setq(name,val) typeof(val) name = val;