diff options
author | Colin Okay <colin@cicadas.surf> | 2022-06-27 12:51:23 -0500 |
---|---|---|
committer | Colin Okay <colin@cicadas.surf> | 2022-06-27 12:51:23 -0500 |
commit | 09a14f4ea52379faf8bbb89e249d4985e29088ea (patch) | |
tree | 53f7f8abef03f99ace49e70170e7bdc6fc56d3b1 | |
parent | effabd80dfd9146f870bc68ef150f4c57b58e937 (diff) |
[modify] with-plist to allow alternate var names
-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)))) |