[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: combining cond and let, to replace pcase.
From: |
Tomas Hlavaty |
Subject: |
Re: combining cond and let, to replace pcase. |
Date: |
Mon, 27 Nov 2023 18:07:58 +0100 |
On Sat 25 Nov 2023 at 22:14, Richard Stallman <rms@gnu.org> wrote:
> > > ;; Same as a clause in `cond',
> > > (CONDITION
> > > do-this-if-CONDITION-then-exit...)
> > >
> > > ;; Variables to bind, as in let
> > > (:bind (x foobar) y z (foo 5) a)
> > > ;; Bindings continue in effect.
>
> > This seems nicer:
>
> > (if CONDITION
> > do-this-if-CONDITION-then-exit...
> > (let ((x foobar) y z (foo 5) a)
> > ...))
>
> That is what you can do now with `if' and `let', but many levels of
> nexting get to be inconvenient and hard to read. That is one of the
> practical conveniences of _using_ `pcase'. I think a replacement for
> `pcase' should offer the same advantage.
if you are after less nesting, cond or or can already do that:
(cond
;; Same as a clause in `cond',
(CONDITION
do-this-if-CONDITION-then-exit...)
;; Variables to bind, as in let
((let ((x foobar) y z (foo 5) a)
;; Bindings continue in effect.
...))
...)
even better:
(or
;; Same as a clause in `cond',
(when CONDITION
do-this-if-CONDITION-then-exit...)
;; Variables to bind, as in let
(let ((x foobar) y z (foo 5) a)
;; Bindings continue in effect.
...)
...)
no need for :bind which seems like superficial syntax that requires
extra cond* macro definition with weird rules.
> > It looks like everybody is trying to design a "do it all super-macro"
>
> If that refers to the approach of `pcase', in which there are dozens
> of different features one must learn, then `cond*' represents turning
> away from that approach. `cond*' has just four features, two of which
> are modified from `cond'.
>
> That's why `cond*' will impose less burden of language complexity than
> `pcase'.
or, when, let are even simpler and the example with or is even more
readable. I do not see what cond* brings. It seems that existing forms
cover the control flow part well enough. What should be the focus is
the destructuring part, like cl-destructuring-bind or your match,
match-set, match-bind or the matching part of pcase.
Btw there is even a kind of user-configurable version of the or macro, a
kind of pluggable-or called run-hook-with-args-until-success which is
like the or macro but with cases as functions in a list. This could
allow for use-extensible variant, if the destructuring part was separate
and reuseable.
- Re: combining cond and let, to replace pcase., (continued)
- Re: combining cond and let, to replace pcase., Alan Mackenzie, 2023/11/19
- Re: combining cond and let, to replace pcase., Michael Heerdegen, 2023/11/21
- Re: combining cond and let, to replace pcase., Axel Forsman, 2023/11/19
- Re: combining cond and let, to replace pcase., Michael Heerdegen, 2023/11/21
- Re: combining cond and let, to replace pcase., Richard Stallman, 2023/11/22
- Re: combining cond and let, to replace pcase., Tomas Hlavaty, 2023/11/23
- Re: combining cond and let, to replace pcase., Richard Stallman, 2023/11/25
- Re: combining cond and let, to replace pcase.,
Tomas Hlavaty <=
- Re: combining cond and let, to replace pcase., Yuri Khan, 2023/11/27
- Re: combining cond and let, to replace pcase., Tomas Hlavaty, 2023/11/28
- Re: combining cond and let, to replace pcase., Manuel Giraud, 2023/11/23
- Re: combining cond and let, to replace pcase., Richard Stallman, 2023/11/25
- Re: combining cond and let, to replace pcase., Daniel Semyonov, 2023/11/23
- Re: combining cond and let, to replace pcase., Daniel Semyonov, 2023/11/23
- Re: combining cond and let, to replace pcase., Richard Stallman, 2023/11/24
- Re: combining cond and let, to replace pcase., Stefan Monnier, 2023/11/25
- Re: combining cond and let, to replace pcase., Richard Stallman, 2023/11/26
- Re: combining cond and let, to replace pcase., Richard Stallman, 2023/11/26