[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#49809: [PATCH] Add macro 'pcase-setq'
From: |
Okam |
Subject: |
bug#49809: [PATCH] Add macro 'pcase-setq' |
Date: |
Thu, 12 Aug 2021 12:11:22 +0000 |
On 8/12/21 2:13 AM, Michael Heerdegen wrote:
> Lars Ingebrigtsen <larsi@gnus.org> writes:
>
>>> But Michael points out that it seems your code won't perform the
>>> assignment if the pattern doesn't match, which I find to be an
>>> odd behavior.
>
> I hope that this is even true in all cases.
>
>>> I'd expect a behavior like that of `pcase-let`, instead.
>>
>> ... because I have no opinion here, really -- behaving like `pcase-let'
>> would be good, but on the other hand, the current behaviour also kinda
>> sorta makes sense.
>
> Here is something else that is odd:
>
> (let ((a 17)
> (b 17)
> (x 17))
> (pcase-setq (or `((,a) [(,b)])
> x)
> '((1) [(2)]))
> (list a b x)) ;; ==> (1 2 nil)
>
> The first `or' branch matches, nevertheless is the binding of `x' being
> set to (a totally unrelated value) nil which doesn't make much sense.
>
>
> Michael.
>
I think that the behavior makes sense for a pattern-matching `let` and
maybe not so much for a destructuring `setq`, which was my intended use
case. I think that it is different because the effects of the
`pcase-setq` form could be less temporary than the effects of the
`pcase-let` form.
If thought of as a destructuring `setq`, then I see the value in
signaling an error when a pattern doesn't match, as you said, but I
guess that would be inconsistent with the value assignments that `or`
generates.
I've attached an example version that would set all of the named
variables to nil before assigning values from the pattern, but I feel
like it is not the best behavior. Please correct my understanding if
that is not what was meant by "a behavior like that of `pcase-let`".
pcase-setq-example.el
Description: Text Data
- bug#49809: [PATCH] Add macro 'pcase-setq', (continued)
- bug#49809: [PATCH] Add macro 'pcase-setq', Michael Heerdegen, 2021/08/04
- bug#49809: [PATCH] Add macro 'pcase-setq', Stefan Monnier, 2021/08/05
- bug#49809: [PATCH] Add macro 'pcase-setq', Stefan Monnier, 2021/08/05
- bug#49809: [PATCH] Add macro 'pcase-setq', Michael Heerdegen, 2021/08/05
- bug#49809: [PATCH] Add macro 'pcase-setq', Stefan Monnier, 2021/08/06
- bug#49809: [PATCH] Add macro 'pcase-setq', Michael Heerdegen, 2021/08/06
bug#49809: [PATCH] Add macro 'pcase-setq', Okam, 2021/08/06
- bug#49809: [PATCH] Add macro 'pcase-setq', Michael Heerdegen, 2021/08/06
- bug#49809: [PATCH] Add macro 'pcase-setq', Lars Ingebrigtsen, 2021/08/11
- bug#49809: [PATCH] Add macro 'pcase-setq', Michael Heerdegen, 2021/08/12
- bug#49809: [PATCH] Add macro 'pcase-setq',
Okam <=
- bug#49809: [PATCH] Add macro 'pcase-setq', Stefan Monnier, 2021/08/12
- bug#49809: [PATCH] Add macro 'pcase-setq', Michael Heerdegen, 2021/08/12
- bug#49809: [PATCH] Add macro 'pcase-setq', Stefan Monnier, 2021/08/13
- bug#49809: [PATCH] Add macro 'pcase-setq', Michael Heerdegen, 2021/08/13
bug#49809: [PATCH] Add macro 'pcase-setq', Stefan Monnier, 2021/08/07
bug#49809: [PATCH] Add macro 'pcase-setq', Michael Heerdegen, 2021/08/08
bug#49809: [PATCH] Add macro 'pcase-setq', Stefan Monnier, 2021/08/09
bug#49809: [PATCH] Add macro 'pcase-setq', Michael Heerdegen, 2021/08/09
bug#49809: [PATCH] Add macro 'pcase-setq', Stefan Monnier, 2021/08/12