From: Christopher Schmidt <ch@ristopher.com>
To: emacs-devel@gnu.org
Subject: Re: New assoc-let package
Date: Sat, 6 Dec 2014 06:36:31 -0500 (EST) [thread overview]
Message-ID: <87wq65rov9@ristopher.com> (raw)
In-Reply-To: <CAAdUY-L=XeaXKOL-jWn7WBiAa8J8etDsrOipVV3-tkSVzRkFnA@mail.gmail.com> (Artur Malabarba's message of "Fri, 5 Dec 2014 20:28:29 +0000")
Artur Malabarba <arturmalabarba@gmail.com> writes:
> ;;;###autoload
> (defmacro assoc-let (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
>
> (assoc-let alist
> (if (and .title .body)
> .body
> .site))
>
> expands to
>
> (let ((.title (cdr (assoc 'title alist)))
> (.body (cdr (assoc 'body alist)))
> (.site (cdr (assoc 'site alist))))
> (if (and .title .body)
> .body
> .site))"
> (declare (indent 1) (debug t))
> `(let ,(mapcar (lambda (x) `(,(car x) (cdr (assoc ',(cdr x) ,alist))))
(alist-get ',(cdr x) ,alist)
> (delete-dups (assoc-let--deep-dot-search body)))
(macroexpand-all body) ?
> ,@body))
I do not think adding assoc-let (assq-let?) to the core is a good idea.
The inability to meaningfully nest different assoc-let forms makes the
macro inflexible. It is probably a good idea to make the dotvars
generalized variables.
next prev parent reply other threads:[~2014-12-06 11:36 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-03 23:40 New assoc-let package Artur Malabarba
2014-12-04 3:54 ` Stefan Monnier
2014-12-05 0:36 ` Artur Malabarba
2014-12-05 2:49 ` Leo Liu
2014-12-06 2:27 ` Ted Zlatanov
2014-12-04 19:36 ` Ted Zlatanov
2014-12-05 0:33 ` Artur Malabarba
2014-12-05 0:45 ` Ted Zlatanov
2014-12-05 20:27 ` Artur Malabarba
2014-12-05 20:28 ` Artur Malabarba
2014-12-06 11:36 ` Christopher Schmidt [this message]
2014-12-06 19:24 ` Artur Malabarba
2014-12-06 19:58 ` Christopher Schmidt
2014-12-07 16:25 ` Ted Zlatanov
2014-12-06 2:42 ` Ted Zlatanov
2014-12-06 4:55 ` Stefan Monnier
2014-12-08 10:56 ` Ted Zlatanov
2014-12-08 12:11 ` Artur Malabarba
2014-12-08 14:01 ` Ted Zlatanov
2014-12-08 15:01 ` Stefan Monnier
2014-12-08 14:59 ` Stefan Monnier
2014-12-08 15:35 ` Ted Zlatanov
2014-12-08 15:56 ` Stefan Monnier
2014-12-08 18:23 ` Artur Malabarba
2014-12-08 18:28 ` Artur Malabarba
2014-12-08 20:07 ` Stefan Monnier
2014-12-09 3:37 ` Artur Malabarba
2014-12-09 16:57 ` Stefan Monnier
2014-12-10 15:20 ` Ted Zlatanov
2014-12-10 15:43 ` Stefan Monnier
2014-12-10 15:49 ` Ted Zlatanov
2014-12-10 18:28 ` Artur Malabarba
2014-12-10 19:00 ` Ted Zlatanov
2014-12-10 19:09 ` Stefan Monnier
2014-12-10 19:14 ` Ted Zlatanov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87wq65rov9@ristopher.com \
--to=ch@ristopher.com \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.