Section 10.2 (page 135) in On Lisp (http://paulgraham.com/onlisp.html) discusses why order of evaluation can sometimes be an issue.
Check is currently defined like this:
(mac check (x test (o alt)) (w/uniq gx `(let ,gx ,x (if (,test ,gx) ,gx ,alt))))
(mac check (test x (o alt)) (w/uniq gx `(let ,gx nil (if (,test (= ,gx ,x)) ,gx ,alt))))
-----