From 09a14f4ea52379faf8bbb89e249d4985e29088ea Mon Sep 17 00:00:00 2001 From: Colin Okay Date: Mon, 27 Jun 2022 12:51:23 -0500 Subject: [modify] with-plist to allow alternate var names --- hyperquirks.lisp | 14 +++++++++----- 1 file 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)))) -- cgit v1.2.3