scope scheme pattern-matching racket

scope - ¿Puede `match` en Racket tener patrones con variables de un ámbito externo?



scheme pattern-matching (1)

Considere el siguiente ejemplo:

#lang racket (match ''(cat . doge) [`(,a . ,b) (match b [a #t] [_ #f])] [_ "Not a pair"])

Esto es lo que podría escribir si quisiera hacer coincidir los pares donde la cabeza y la cola son iguales. Sin embargo, esto no funciona porque la segunda a está vinculada como una nueva variable (y coincide con cualquier cosa). ¿Hay alguna forma de patrón que me permita usar el límite anterior desde el ámbito externo?

Sé que esto se puede lograr de la siguiente manera.

(match* (''cat ''doge) [(a a) #t] [(_ _) #f])

pero todavía me gustaría saber si hay una manera de obtener esa variable desde el ámbito externo (o si hay una razón para no hacerlo, como un posible problema de colisión de nombres o algo así).


Utilice == :

(match ''(cat . doge) [`(,a . ,b) (match b [(== a) #t] [_ #f])] [_ "Not a pair"])

Debido a la ubicación en los documentos, == es fácil de pasar por alto.