(defun href (base &rest params)
(with-output-to-string (href)
(write-string base href)
(when params
(write-char #\? href)
(loop
for (key value . rest) on params by #'cddr
do (etypecase key
(string (write-string key href))
(symbol (write-string (string-downcase key) href)))
do (write-char #\= href)
do (princ value href)
when rest
do (write-char #\& href)))))Source Context