Inverted syntax: Difference between revisions

Content added Content deleted
Line 91: Line 91:
(cond
(cond
((atom form) form) ;; atom: leave alone
((atom form) form) ;; atom: leave alone
((null (cdr form)) form) ;; one-element form, leave alone
((null (cdr form)) form) ;; one-element form: leave alone
((null (cddr form)) ;; two-element form, swap
((null (cddr form)) ;; two-element form: swap
(destructuring-bind (arg oper) form
(destructuring-bind (arg oper) form
`(,oper ,(unrev-syntax arg))))
`(,oper ,(unrev-syntax arg))))
(t ;; two or more args, swap and reverse whole thing
(t ;; two or more args: swap last two, add others in reverse
(destructuring-bind (arg1 oper &rest args) (reverse form)
(destructuring-bind (arg1 oper &rest args) (reverse form)
`(,oper ,(unrev-syntax arg1) ,@(mapcar #'unrev-syntax args)))))))
`(,oper ,(unrev-syntax arg1) ,@(mapcar #'unrev-syntax args)))))))