(defmacro if* (opt-var+cond
               then &rest else)
  (let* ((have-var (cdr opt-var+cond))
         (var
          (if have-var
              (car opt-var+cond)
            'it))
         (cond
          (if have-var
              (cadr opt-var+cond)
            (car opt-var+cond))))
    `(let ((,var ,cond))
       (if ,var ,then ,@else))))