unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Nathan Trapuzzano <nbtrap@nbtrap.com>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: emacs-devel@gnu.org
Subject: Re: Double unquote/unquote-splicing
Date: Mon, 04 Nov 2013 14:09:11 -0500	[thread overview]
Message-ID: <87habsdlwo.fsf@nbtrap.com> (raw)
In-Reply-To: <jwvfvrcja45.fsf-monnier+emacs@gnu.org> (Stefan Monnier's message of "Mon, 04 Nov 2013 13:33:15 -0500")

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>> This is incorrect.  ``(a ,,@x) where x=(1 2 3) would evaluate to
>> (\` (a (\, 1) (\, 2) (\, 3))).  The first comma in ,,@ has the effect of
>> being applied member-wise to each element spliced out of ,@.  Cf. CLHS
>> `Backquote' (http://www.lispworks.com/documentation/HyperSpec/Body/02_df.htm).
>
> This is even worse since it means that the expansion of ,@foo depends on
> the context.

Not necessarily.  As I said, you could simply define \, and \,@ with
more than one argument to behave the same as a series of \, or \,@s with
one argument.

In fact, I just built from trunk with two lines of code from
backquote.el changed (using your helpful comments), and it seems to work
precisely like that.  In other words, this doesn't seem to require any
extra work.

>> "The backquote syntax was particularly powerful when nested. This
>> occurred primarily within macro-defining macros; because such were coded
>> primarily by wizards, the ability to write and interpret nested
>> backquote expressions was soon surrounded by a certain mystique. Alan
>> Bawden of MIT acquired a particular reputation as backquote-meister in
>> the early days of the Lisp Machine." - "The Evolution of Lisp", Gabriel,
>> Steele.
>
> That sounds about right: it's only for wizards.

On second thought, that quote doesn't really support my argument.  It's
rather neutral.

However, the fact is that nested backquotes _are_ for wizards.  The
problem is, Emacs' nested backquotes aren't fully functional, the result
being that the code is harder for us non-wizards to read.

In summary, this change would

1. break nothing,
2. require virtually no work to be done,
3. render macro-writing macros easier to read and write; and
4. bring Elisp behavior right in line with CL and Scheme.

Even if you disagree with (3), this seems like a win all around.



  parent reply	other threads:[~2013-11-04 19:09 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-04 14:03 Double unquote/unquote-splicing Nathan Trapuzzano
2013-11-04 17:27 ` Stefan Monnier
2013-11-04 17:59   ` Nathan Trapuzzano
2013-11-04 18:11     ` Nathan Trapuzzano
2013-11-04 18:33     ` Stefan Monnier
2013-11-04 19:01       ` Drew Adams
2013-11-04 19:09       ` Nathan Trapuzzano [this message]
2013-11-04 20:41         ` Stefan Monnier
2013-11-05 15:03           ` Nathan Trapuzzano
2013-11-05 19:14             ` Stefan Monnier
2013-11-05  4:01         ` Stephen J. Turnbull
2013-11-05 15:22           ` Nathan Trapuzzano
2013-11-05 21:48             ` Stephen J. Turnbull

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

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87habsdlwo.fsf@nbtrap.com \
    --to=nbtrap@nbtrap.com \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    /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 public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).