diff options
-rw-r--r-- | hyperquirks.lisp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/hyperquirks.lisp b/hyperquirks.lisp index 36029e2..7c1f8e9 100644 --- a/hyperquirks.lisp +++ b/hyperquirks.lisp @@ -140,9 +140,9 @@ PLIST is any expression that evaluates to a propety list. E.g. (let ((me (list :name \"colin\" 'age 40 :occupation :slacker))) - (with-plist (name age occupation) me + (with-plist ((my-name name) age occupation) me (format t \"My name is ~a, and I am a ~a year old ~a~%\" - name age occupation))) + my-name age occupation))) Will print out: My name is colin, and I am a 40 year old SLACKER @@ -154,9 +154,13 @@ some other package. (gensym)) (bindings (loop for var in vars - for keyword-var = (intern (symbol-name var) 'keyword) - collect `(,var (or (getf ,plist-var ,keyword-var) - (getf ,plist-var ',var)))))) + when (consp var) + collect `(,(first var) + (or (getf ,plist-var ,(intern (symbol-name (second var)) 'keyword)) + (getf ,plist-var ',var))) + else + collect `(,var (or (getf ,plist-var ,(intern (symbol-name var) 'keywword)) + (getf ,plist-var ',var)))))) `(let ((,plist-var ,plist)) (let ,bindings ,@body)))) |