(mac let (parms val . body) `((fn (,parms) ,@body) ,val)) (mac macro args `(list 'lit 'mac (fn ,@args))) (mac def (n . rest) `(set ,n (fn ,@rest))) (mac mac (n . rest) `(set ,n (macro ,@rest))) (mac or args (if (no args) nil (let v (uvar) `(let ,v ,(car args) (if ,v ,v (or ,@(cdr args))))))) (mac and args (reduce (fn es (cons 'if es)) (or args '(t))))