Right, so I need a separate metafunction for each pattern I want to negate.
On Mon, Oct 24, 2016 at 6:56 PM, Robby Findler <[email protected]> wrote: > I am saying to write this: > > (define-metafunction L > [(not-thing pat) #false] > [(not-thing any) #true]) > > and then where you wrote: > > (where/not pat tm) > > write this: > > (where #true (not-thing pat)) > > > > On Mon, Oct 24, 2016 at 5:47 PM, Sam Caldwell <[email protected]> wrote: > >> In the meantime, consider using a metafunction with an `else` clause. > > > > This would entail fixing the pattern, right? As in, I can write a > > metafunction deciding whether a term does not match a pattern, but I > can't > > write a metafunction taking both the term and the pattern. > > > > I'm ok with failed matches not being first-class in Redex, but I'm a > little > > disappointed if I can't create my own shorthand. > > > > Thanks, > > Sam Caldwell > > > > On Mon, Oct 24, 2016 at 6:31 PM, Robby Findler < > [email protected]> > > wrote: > >> > >> Unfortunately, Redex's pattern language does not currently support > >> `not`. It might be easy to add it, or maybe hard, or maybe impossible. > >> Offhand, it seems probably possible to support in the unifier and > >> impossible in the enumerator and not hard in the matcher. > >> > >> In the meantime, consider using a metafunction with an `else` clause. > >> > >> Robby > >> > >> > >> On Mon, Oct 24, 2016 at 5:15 PM, Sam Caldwell <[email protected]> wrote: > >> > I have a Redex judgment that I would like to specify in terms of a > >> > *failed* > >> > pattern match. I can write this like so: > >> > > >> > [(side-condition ,(not (redex-match? L pat (term tm))) > >> > ------------------------------------------------------------------ > >> > ...] > >> > > >> > which works, but I would rather just abbreviate this using a macro > >> > (since > >> > afaict there are no existing constructs in redex to do this), so I > could > >> > write for instance: > >> > > >> > [(where/not pat tm) > >> > -------------------------- > >> > ...] > >> > > >> > But then I get an error: "define-judgment-form: expected judgment form > >> > name > >> > in: where/not" > >> > > >> > Does anybody know how to achieve this? > >> > > >> > Thanks, > >> > Sam Caldwell > >> > > >> > Full example: > >> > > >> > ============================================================== > >> > > >> > #lang racket > >> > > >> > (require redex) > >> > > >> > (define-language L > >> > (E number (+ E E))) > >> > > >> > (define-syntax (where/not stx) > >> > (syntax-case stx () > >> > [(_ pat tm) > >> > #'(side-condition ,(not (redex-match? L pat (term tm))))])) > >> > > >> > (define-judgment-form L > >> > #:mode (j I) > >> > [(where/not number E) > >> > --------------------- > >> > (j E)]) > >> > > >> > -- > >> > You received this message because you are subscribed to the Google > >> > Groups > >> > "Racket Users" group. > >> > To unsubscribe from this group and stop receiving emails from it, send > >> > an > >> > email to [email protected]. > >> > For more options, visit https://groups.google.com/d/optout. > > > > > > -- > You received this message because you are subscribed to the Google Groups > "Racket Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

