all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
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.



  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.