Function: -lambda
-lambda is a macro defined in dash.el.
Signature
(-lambda MATCH-FORM &rest BODY)
Documentation
Return a lambda which destructures its input as MATCH-FORM and executes BODY.
Note that you have to enclose the MATCH-FORM in a pair of parens, such that:
(-lambda (x) body)
(-lambda (x y ...) body)
has the usual semantics of lambda. Furthermore, these get
translated into normal lambda, so there is no performance
penalty.
See -let for a description of the destructuring mechanism.
Source Code
;; Defined in ~/.emacs.d/elpa/dash-20260221.1346/dash.el
(defmacro -lambda (match-form &rest body)
"Return a lambda which destructures its input as MATCH-FORM and executes BODY.
Note that you have to enclose the MATCH-FORM in a pair of parens,
such that:
(-lambda (x) body)
(-lambda (x y ...) body)
has the usual semantics of `lambda'. Furthermore, these get
translated into normal `lambda', so there is no performance
penalty.
See `-let' for a description of the destructuring mechanism."
(declare (doc-string 2) (indent defun)
(debug (&define sexp
[&optional stringp]
[&optional ("interactive" interactive)]
def-body)))
(cond
((nlistp match-form)
(signal 'wrong-type-argument (list #'listp match-form)))
;; No destructuring, so just return regular `lambda' for speed.
((-all? #'symbolp match-form)
`(lambda ,match-form ,@body))
((let ((inputs (--map-indexed
(list it (make-symbol (format "input%d" it-index)))
match-form)))
;; TODO: because inputs to the `lambda' are evaluated only once,
;; `-let*' need not create the extra bindings to ensure that.
;; We should find a way to optimize that. Not critical however.
`(lambda ,(mapcar #'cadr inputs)
(-let* ,inputs ,@body))))))