aif.ss
(module aif
  mzscheme

  (provide aif)

  ;;!
  ;; (aif name condition true-arm false-arm)
  ;; (aif name predicate condition true-arm false-arm)
  ;;
  ;; An anaphoric if (based on a pattern from On Lisp).  Like a normal
  ;; if, except the value of condition is bound to name in the scope of
  ;; the if
  ;;
  ;; E.g.
  ;;
  ;; (aif tail (member 'b '(a b c))
  ;;   tail
  ;;   'not-found)
  ;;
  ;; expands to
  ;;
  ;; (let ((tail (member 'b '(a b c))))
  ;;   (if tail
  ;;       tail
  ;;       'not-found))
  ;;
  ;; => '(a b c)
  (define-syntax aif
    (syntax-rules ()
      ((_ name test true-arm false-arm)
       (let ((name test))
         (if name
             true-arm
             false-arm)))
      ((_ name pred test true-arm false-arm)
       (let ((name test))
         (if (pred name)
             true-arm
             false-arm)))
      ))
  )