What's wrong with `match`? It seems to be what you want. Macro is not going to help you here.
On Mon, Jul 6, 2020 at 3:47 AM Oualmakran Yassine <yassine...@gmail.com> wrote: > Hello, > > I have some difficulties when trying to create a macro doing some pattern > matching on a hash-table and was hoping finding some help. > The macro is taking a hash-table as parameter and I would like to extract > the value for the key 'name. > I did several trials of my macro with what should be, for my > understanding, the same hash-table but got always a different result. > Suprisingly, when I'm trying the same partern matching in a simple "match" > at runtime, I always get the answer expected. > > > Here is my code: > > (define-syntax (m stx) > (syntax-case stx () > [(_ (hash-table 'name n m ...)) > #'(symbol->string n)] > [(_ (hash-table x0 x1 ...)) > #'"..."] > [(_ (hash-table ('name n) (k v) ...)) > #'"FOO"] > [(_ (hash-table (k v) ...)) > #'"BAM"] > [(_ (hash-table (k0 v0) (k1 v1) ...)) > #'"BAZ"] > [(_ (hash-table x ...)) > #'"COMMON"] > [x #'"WHY"])) > > (define (define-person . fields) > (for/hash ([k '(name e-mail nickname)] > [field fields]) > (values k field))) > > (define person (define-person 'my-name 'my-email 'my-nickname)) > > ; gives why (why nothing before matches ?) > (m person) > > ; my-email > (m (define-person 'my-name 'my-email 'my-nickname)) > > ; gives my-name > (m (hash > 'name 'my-name > 'e-mail 'my-email > 'nickname 'my-nickname)) > > ; gives my-nickname > (m (hash > 'nickname 'my-nickname > 'name 'my-name > 'e-mail 'my-email)) > > > -- > 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 racket-users+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/racket-users/82364adf-fe5d-4c6f-bf33-51852c423371o%40googlegroups.com > <https://groups.google.com/d/msgid/racket-users/82364adf-fe5d-4c6f-bf33-51852c423371o%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- 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 racket-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/CADcuegt1-aR-Bi-Reb-gGouj8sCo%2B7Zun60R3HgUUh0YxKx%2BmA%40mail.gmail.com.