]> code.delx.au - gnu-emacs/blobdiff - lisp/emacs-lisp/map.el
* lisp/emacs-lisp/map.el (map-let): Better docstring.
[gnu-emacs] / lisp / emacs-lisp / map.el
index a0792d978798818234605abcc5aefb381ade95d9..85f6bcaa73cfb2211da33772a2ceca04e0ebac51 100644 (file)
 (pcase-defmacro map (&rest args)
   "pcase pattern matching map elements.
 Matches if the object is a map (list, hash-table or array), and
-binds values from ARGS to the corresponding element of the map.
+binds values from ARGS to their corresponding elements of the map.
 
-ARGS can be a list elements of the form (KEY PAT) or elements
-of the form SYMBOL, which stands for (SYMBOL . SYMBOL)."
+ARGS can be a list elements of the form (KEY PAT) or elements
+of the form SYMBOL, which stands for ('SYMBOL SYMBOL)."
   `(and (pred map-p)
         ,@(map--make-pcase-bindings args)))
 
-(defmacro map-let (args map &rest body)
-  "Bind the variables in ARGS to the elements of MAP then evaluate BODY.
+(defmacro map-let (keys map &rest body)
+  "Bind the variables in KEYS to the elements of MAP then evaluate BODY.
 
-ARGS can be an alist of key/binding pairs or a list of keys.  MAP
-can be a list, hash-table or array."
+KEYS can be a list of symbols, in which case each element will be
+bound to the looked up value in MAP.
+
+KEYS can also be a list of (KEY VARNAME) pairs, in which case
+KEY is not quoted.
+
+MAP can be a list, hash-table or array."
   (declare (indent 2) (debug t))
-  `(pcase-let ((,(map--make-pcase-patterns args) ,map))
+  `(pcase-let ((,(map--make-pcase-patterns keys) ,map))
      ,@body))
 
 (defmacro map--dispatch (spec &rest args)