+(defmacro bind-one-keyarg (keyarg)
+ `(list ,(car keyarg) ,(cdr keyarg)))
+
+(defmacro bind-all-keyargs (keyargs)
+ "Convert a list of keyarg pairs and convert eval/bind arguments"
+ (let* ((npairs (length keyargs))
+ (syms (make-array npairs))
+ (ipair 0)
+ (ipair2 0))
+ (declare (dynamic-extent syms))
+ (dotimes (i npairs)
+ (setf (aref syms i) (gensym)))
+ `(let ,(mapcar #'(lambda (ka)
+ (prog1
+ (list (aref syms ipair) (cdr ka))
+ (incf ipair)))
+ keyargs)
+ (list ,@(mapcar #'(lambda (ka)
+ (prog1
+ `(cons ,(car ka) ,(aref syms ipair2))
+ (incf ipair2)))
+ keyargs)))))
+