Consider the following example:
#lang racket
(match '(cat . doge)
[`(,a . ,b)
(match b
[a #t]
[_ #f])]
[_ "Not a pair"])
This is what I might write if I wanted to match pairs where the head and tail are the same. This doesn't work though because the second a
is bound as a new variable (and matches anything). Are there any pattern forms which allow me to use the previously bound a
from the outer scope?
I know this can be achieved in the following way
(match* ('cat 'doge)
[(a a) #t]
[(_ _) #f])
but I still would like to know if there is a way to get that variable from the outer scope (or if there is a reason for not doing so, like some potential name collision problem or something).
#:when
. For example, the clause could be[(cons a b) #:when (eq? a b) #t]
. Of course==
is simpler in this example. – Cerda