What I really wanted was a "pascal-type" tokenizer and second stack for commands. "(" means push next and ")" means pop and execute. In this kind of system
(if (< a 1) (setq a (+ a 2))) is totally valid without much overhead and about 187% more readable than Forth.