Racket 中的“match”是否可以包含来自外部范围的变量的模式?
Can `match` in Racket have patterns with variables from an outer scope?
考虑以下示例:
#lang racket
(match '(cat . doge)
[`(,a . ,b)
(match b
[a #t]
[_ #f])]
[_ "Not a pair"])
如果我想匹配头和尾相同的对,我可能会这样写。这不起作用,因为第二个 a
被绑定为一个新变量(并且匹配任何东西)。是否有任何模式形式允许我从外部范围使用先前绑定的 a
?
我知道这可以通过以下方式实现
(match* ('cat 'doge)
[(a a) #t]
[(_ _) #f])
但我仍然想知道是否有办法从外部范围获取该变量(或者是否有不这样做的原因,比如一些潜在的名称冲突问题或其他问题)。
考虑以下示例:
#lang racket
(match '(cat . doge)
[`(,a . ,b)
(match b
[a #t]
[_ #f])]
[_ "Not a pair"])
如果我想匹配头和尾相同的对,我可能会这样写。这不起作用,因为第二个 a
被绑定为一个新变量(并且匹配任何东西)。是否有任何模式形式允许我从外部范围使用先前绑定的 a
?
我知道这可以通过以下方式实现
(match* ('cat 'doge)
[(a a) #t]
[(_ _) #f])
但我仍然想知道是否有办法从外部范围获取该变量(或者是否有不这样做的原因,比如一些潜在的名称冲突问题或其他问题)。