-(defun resolve-address (address)
- (etypecase address
- (address address)
- (string
- (dolist (fmt *parseable-formats*)
- (handler-case (return (funcall (cdr fmt) address))
- (error ()
- nil))))))
-
-(defun define-parseable-address (name fun &optional (order '(:last)))
- (if (symbolp order) (setf order (list order)))
- (let ((newlist (remove-if #'(lambda (o) (eq (car o) name)) *parseable-formats*)))
- (setf *parseable-formats*
- (ecase (car order)
- ((:first)
- (cons (cons name fun) newlist))
- ((:last)
- (append newlist `((,name . ,fun))))))))
-