[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#24875: 26.0.50; In Dotted Pair Notation, the read function returns C
From: |
Stefan Monnier |
Subject: |
bug#24875: 26.0.50; In Dotted Pair Notation, the read function returns CDR if CAR is absent |
Date: |
Tue, 06 Jul 2021 12:43:58 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) |
Lars Ingebrigtsen [2021-07-06 17:32:26] wrote:
> Chunyang Xu <mail@xuchunyang.me> writes:
>
>> For example, I eval this in the *scratch* buffer:
>>
>> (read "( . 123)")
>> ⇒ 123
>>
>> (read "(1 . ( . (3 . nil)))")
>> ⇒ (1 3)
>>
>> I can't find explanation about this behavior in elisp manual. Is it
>> expected?
>
> That is indeed very eccentric behaviour, so we should probably mention
> it somewhere? (I guess we can't change it.)
>
> Anybody got an opinion here, or a way that we can describe it in the
> manual except pointing at the examples and then going ¯\_(ツ)_/¯?
It's the "natural" behavior if you start from
(Ea . Ed)
as the notation for cons cells and extend it to
(E1 E2 E3 .. . Ed)
such that
(E1 {foo} . Ed) = (E1 . ({foo} . Ed))
because then you replace `{foo}` with the empty sequence and you get:
(E1 . Ed) = (E1 . ( . Ed))
and hence
Ed = ( . Ed)
It's not used very often, so in theory we could potentially change it,
but I haven't seen any good alternative interpretation for it, and
I don't see the benefit of signaling an error.
Stefan