Re: Lexical scope of pattern variables is not strictly respected in the sample implementation Marc Nieper-WiÃkirchen 01 Sep 2020 09:25 UTC
Sorry, typo on my side. My example (corrected) has meant to be (match '1 ((and odd? (? odd?)) odd?)) Am Di., 1. Sept. 2020 um 11:21 Uhr schrieb Felix Thibault <xxxxxx@gmail.com>: > > > > On Tue, Sep 1, 2020 at 4:35 AM Marc Nieper-Wißkirchen <xxxxxx@nieper-wisskirchen.de> wrote: >> >> In the specification section of SRFI 204, it says "identifiers will >> match anything, and make the corresponding binding available in the >> body", which I read as that the identifiers are lexically bound in an >> extended environment, in which the body is evaluated. >> >> The sample implementation, however, fails to respect the correct >> lexical scoping in some cases: >> >> (match '1 ((and odd (? odd)) odd)) >> >> The expected value of this expression (and according to how match is >> specified in SRFI 204) is 1. The sample implementation, however, fails >> with an error because the binding of odd is introduced too early, >> namely in a scope surrounding the pattern `(? odd)` as well. >> >> To make the sample implementation do the correct thing, it has to >> defer all actual bindings or bind to temporary variables first. >> >> Marc > > > Unless I'm misunderstanding > (match '1 ((and odd (? odd)) odd)) > needs a predicate like either: > (match '1 ((and odd (? odd?)) odd)) > or > (match '1 ((and odd (? odd? odd)) odd)) > both of which evaluate to 1