(defun %qrt (arguments) (flet ((make-binding (argument) (let ((string (string-downcase (symbol-name argument)))) `(,argument (read-from-minibuffer (make-minibuffer :input-prompt ,string :input-buffer "SOME-SORTA-FISH"))))) (make-print-form (argument) `(print ,argument))) (let ((bindings (mapcar #'make-binding arguments)) (body (mapcar #'make-print-form arguments))) `(with-result* ,bindings ,@body)))) (defmacro qrt (&rest arguments) (%qrt arguments)) ;;;;;;;;;;;;;;;;;;;;;;;; CL-USER> (macroexpand-1 '(qrt a b c)) (WITH-RESULT* ((A (READ-FROM-MINIBUFFER (MAKE-MINIBUFFER :INPUT-PROMPT "a":INPUT-BUFFER "SOME-SORTA-FISH"))) (B (READ-FROM-MINIBUFFER (MAKE-MINIBUFFER :INPUT-PROMPT "b" :INPUT-BUFFER "SOME-SORTA-FISH"))) (C (READ-FROM-MINIBUFFER (MAKE-MINIBUFFER :INPUT-PROMPT "c" :INPUT-BUFFER "SOME-SORTA-FISH")))) (PRINT A) (PRINT B) (PRINT C)) T