preprocessor tricks

* FIRST( A, B, C ) => A
* REST( A, B, C ) => B, C
* HEAD( (A) (B) (C) ) => A
* TAIL( (A) (B) (C) ) => (B) (C)
* COLLAPSE( (A) (B) (C) ) => A B C
* GLUE( (A) (B) (C), : ) => A : B : C
* LIST( (A) (B) (C) ) => A, B, C
* REVERSE( (A) (B) (C) ) => (C) (B) (A)
* MAP( (A) (B) (C), X ) => (X(A)) (X(B)) (X(C))