let-alist is an autoloaded macro defined in let-alist.el.gz.
Signature
(let-alist ALIST &rest BODY)
Documentation
Let-bind dotted symbols to their cdrs in ALIST and execute BODY.
Dotted symbol is any symbol starting with a .. Only those present
in BODY are let-bound and this search is done at compile time.
For instance, the following code
(let-alist alist
(if (and .title .body)
.body
.site
.site.contents))
essentially expands to
(let ((.title (cdr (assq 'title alist)))
(.body (cdr (assq 'body alist)))
(.site (cdr (assq 'site alist)))
(.site.contents (cdr (assq 'contents (cdr (assq 'site alist))))))
(if (and .title .body)
.body
.site
.site.contents))
If you nest let-alist invocations, the inner one can't access
the variables of the outer one. You can, however, access alists
inside the original alist by using dots inside the symbol, as
displayed in the example above.
Note that there is no way to differentiate the case where a key
is missing from when it is present, but its value is nil. Thus,
the following form evaluates to nil:
(let-alist '((some-key . nil))
.some-key)
View in manual
References
let-alist is unused in let-alist.el.gz.
Find all references Functions used by let-alist
Debugging
Enable edebug Enable tracing
Disassemble Forget
Source Code
/usr/share/emacs/29.3/lisp/emacs-lisp/let-alist.el.gz
(defmacro let-alist (alist &rest body)
"Let-bind dotted symbols to their cdrs in ALIST and execute BODY.
Dotted symbol is any symbol starting with a `.'. Only those present
in BODY are let-bound and this search is done at compile time.
For instance, the following code
(let-alist alist
(if (and .title .body)
.body
.site
.site.contents))
essentially expands to
(let ((.title (cdr (assq \\='title alist)))
(.body (cdr (assq \\='body alist)))
(.site (cdr (assq \\='site alist)))
(.site.contents (cdr (assq \\='contents (cdr (assq \\='site alist))))))
(if (and .title .body)
.body
.site
.site.contents))
If you nest `let-alist' invocations, the inner one can't access
the variables of the outer one. You can, however, access alists
inside the original alist by using dots inside the symbol, as
displayed in the example above.
Note that there is no way to differentiate the case where a key
is missing from when it is present, but its value is nil. Thus,
the following form evaluates to nil:
(let-alist \\='((some-key . nil))
.some-key)"
(declare (indent 1) (debug t))
(let ((var (make-symbol "alist")))
`(let ((,var ,alist))
(let ,(mapcar (lambda (x) `(,(car x) ,(let-alist--access-sexp (car x) var)))
(delete-dups (let-alist--deep-dot-search body)))
,@body))))
Symbol Properties
edebug-form-spec
t
function-history
("/usr/share/emacs/29.3/lisp/emacs-lisp/let-alist.elc"
(autoload "let-alist"
("loaddefs.elc" . 760421)
nil t))
lisp-indent-function
1