all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Michael Heerdegen <michael_heerdegen@web.de>
To: Stefan Monnier <monnier@IRO.UMontreal.CA>
Cc: Mark Oteiza <mvoteiza@udel.edu>,
	npostavs@users.sourceforge.net, emacs-devel@gnu.org
Subject: Re: if-let/if-let*/and-let/..
Date: Thu, 22 Feb 2018 02:08:16 +0100	[thread overview]
Message-ID: <87sh9t4yrj.fsf@web.de> (raw)
In-Reply-To: <jwvmv0bapxc.fsf-monnier+emacs@gnu.org> (Stefan Monnier's message of "Wed, 14 Feb 2018 22:37:51 -0500")

Stefan Monnier <monnier@IRO.UMontreal.CA> writes:

> >  (if-let* (x (y 1) (z 2)) "dogs" "cats") => "cats"
>
> Same as the first case above, we could/should detect this case during
> macro-expansion since this is not of the form (VAR EXP) but (VAR EXP
> EXP).

I understand now what the problem is.

Mark had implemented and-let* as in srfi-2:

  https://srfi.schemers.org/srfi-2/srfi-2.html

(scroll to "Specification")

which interprets a (bound) symbol in the binding spec as a boolean.

Noam then had asked for making if-let's binding SPEC compatible with
that of the new and-let* - but the single-binding case of those was
incompatible with that, so foo-let* were born breaking with the single
binding case, and at that time we wanted to introduce these names
anyway.  foo-let were then reimplemented based on foo-let* but made
still supporting the single-binding case for backward compatibility as
special case, and also marked obsolete to not have two versions of the
very same thing.

That treatment of a single SYMBOL in the SPEC is redundant AFAIK (in the
SRFI2 and in master) since it can also be written as (SYMBOL).  If we
sacrifice the absolute rigid compatibility with SRFI2, we can treat the
binding SPEC, as Stefan suggested, like

#+begin_src emacs-lisp
(pcase spec
    (`(,(pred symbolp) . ,rest)
     (pcase rest
       (`(,_) (cl-callf list spec)) ;the single binding syntax
       (_     (signal 'error (list "if-let: Bad binding spec" spec))))))
#+end_src

being slightly backward incompatible since

| 4612b2a2b37026bef5a9b8e92878a15dabb9b261
| Parent:     c87331a1c0 Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs
| Merged:     emacs-25
| Containing: emacs-26 master
| Follows:    emacs-25.1 (130022)
| 
| Implement and-let*


Michael.



  parent reply	other threads:[~2018-02-22  1:08 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-11 23:51 if-let/if-let*/and-let/ Stefan Monnier
     [not found] ` <87wozijhpk.fsf@web.de>
     [not found]   ` <jwv8tbyyx4x.fsf-monnier+emacs@gnu.org>
2018-02-12 17:32     ` if-let/if-let*/and-let/ Stefan Monnier
2018-02-13 18:23       ` if-let/if-let*/and-let/ Michael Heerdegen
2018-02-13 19:24         ` if-let/if-let*/and-let/ Stefan Monnier
2018-02-13 20:52           ` if-let/if-let*/and-let/ John Wiegley
2018-02-13 19:31         ` if-let/if-let*/and-let/ Mark Oteiza
2018-02-13 20:49           ` if-let/if-let*/and-let/ Stefan Monnier
2018-02-14  0:07             ` if-let/if-let*/and-let/ Mark Oteiza
2018-02-14 23:07               ` if-let/if-let*/and-let/ Michael Heerdegen
2018-02-15  3:37                 ` if-let/if-let*/and-let/ Stefan Monnier
2018-02-21  4:26                   ` if-let/if-let*/and-let/ Michael Heerdegen
2018-02-22  1:08                   ` Michael Heerdegen [this message]
2018-02-22  5:10                     ` if-let/if-let*/and-let/ Stefan Monnier
2018-02-22  7:55                       ` if-let/if-let*/and-let/ Michael Heerdegen
2018-03-03 14:12                         ` if-let/if-let*/and-let/ Michael Heerdegen
2018-03-06 15:03                           ` if-let/if-let*/and-let/ Michael Heerdegen
2018-03-06 15:31                             ` if-let/if-let*/and-let/ Michael Heerdegen
2018-03-06 15:34                               ` if-let/if-let*/and-let/ John Wiegley
2018-03-06 16:03                                 ` if-let/if-let*/and-let/ Stefan Monnier
2018-03-06 17:40                                   ` if-let/if-let*/and-let/ Michael Heerdegen
2018-03-06 19:12                                     ` if-let/if-let*/and-let/ Radon Rosborough
2018-03-07  2:13                                       ` if-let/if-let*/and-let/ James Nguyen
2018-03-07  3:42                                         ` if-let/if-let*/and-let/ Kaushal Modi
2018-03-06 17:40                                   ` if-let/if-let*/and-let/ Eli Zaretskii
2018-03-07 14:15                                     ` if-let/if-let*/and-let/ Michael Heerdegen
2018-03-07 15:13                                       ` if-let/if-let*/and-let/ Nicolas Petton
2018-03-07 20:43                                       ` if-let/if-let*/and-let/ John Wiegley
2018-03-08 13:53                                       ` if-let/if-let*/and-let/ Eli Zaretskii
2018-03-09 15:16                                         ` if-let/if-let*/and-let/ Michael Heerdegen
2018-03-09 15:32                                           ` if-let/if-let*/and-let/ Eli Zaretskii
2018-03-09 16:07                                             ` if-let/if-let*/and-let/ Michael Heerdegen
2018-03-09 16:24                                               ` if-let/if-let*/and-let/ Eli Zaretskii
2018-03-09 16:33                                                 ` if-let/if-let*/and-let/ Michael Heerdegen
2018-03-09 18:22                                                   ` if-let/if-let*/and-let/ Eli Zaretskii
2018-03-09 22:24                                                     ` if-let/if-let*/and-let/ Michael Heerdegen
2018-03-10  8:02                                                       ` if-let/if-let*/and-let/ Eli Zaretskii
2018-03-10 15:54                                                         ` if-let/if-let*/and-let/ Stefan Monnier
2018-03-10 16:07                                                         ` if-let/if-let*/and-let/ Michael Heerdegen
2018-03-10 16:29                                                           ` if-let/if-let*/and-let/ Eli Zaretskii
2018-03-10 17:16                                                             ` if-let/if-let*/and-let/ Michael Heerdegen
2018-03-10 17:29                                                               ` if-let/if-let*/and-let/ Eli Zaretskii
2018-03-06 16:04                                 ` if-let/if-let*/and-let/ Eli Zaretskii
2018-03-06 17:35                                   ` if-let/if-let*/and-let/ Michael Heerdegen
2018-02-13 20:54           ` if-let/if-let*/and-let/ Michael Heerdegen
2018-02-13 21:57             ` if-let/if-let*/and-let/ Eric Abrahamsen
2018-02-13 22:39               ` if-let/if-let*/and-let/ Michael Heerdegen
2018-02-13 22:51                 ` if-let/if-let*/and-let/ Eric Abrahamsen

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=87sh9t4yrj.fsf@web.de \
    --to=michael_heerdegen@web.de \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@IRO.UMontreal.CA \
    --cc=mvoteiza@udel.edu \
    --cc=npostavs@users.sourceforge.net \
    /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.