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 <[email protected]>
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 [email protected].
> 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 [email protected].
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.

Reply via email to