Hacker News new | ask | show | jobs
by stevelosh 2381 days ago
This would save me literally thousands of lines of code at my day job:

    (defmacro ?= (symbol-or-symbols expr)
      (let* ((symbols (etypecase symbol-or-symbols
                        (cons symbol-or-symbols)
                        (symbol (list symbol-or-symbols))))
             (tmps (loop :for s :in symbols :collect (gensym (symbol-name s))))
             (err (gensym "ERROR")))
        `(multiple-value-bind (,@tmps ,err) ,expr
           (if (not (null ,err))
             (return ,err)
             (setf (values ,@symbols) (values ,@tmps))))))