Name: Anonymous 2010-01-31 11:01
(defmacro tailprog (let-bindings pseudo-funcs &rest forms)
(let (argtags-forms macrolet-elems)
(dolist (pfunc pseudo-funcs)
(destructuring-bind (name vars &rest forms) pfunc
(push `(label ,name ,@vars) argtags-forms)
(push `(return (progn ,@forms)) argtags-forms)
(push `(,name (&rest args) `(goto ,',name ,@args)) macrolet-elems)))
`(macrolet (,.(nreverse macrolet-elems))
(let ,let-bindings
(argtags nil
(return (progn ,@forms))
,.(nreverse argtags-forms))))))ALL YOUR TAIL RECURSION R BELONG TO US