Ответ 1
Используйте ==
:
(match '(cat . doge)
[`(,a . ,b)
(match b
[(== a) #t]
[_ #f])]
[_ "Not a pair"])
Из-за размещения в документах ==
легко пропустить.
Рассмотрим следующий пример:
#lang racket
(match '(cat . doge)
[`(,a . ,b)
(match b
[a #t]
[_ #f])]
[_ "Not a pair"])
Это то, что я мог бы написать, если бы я хотел сопоставлять пары, где голова и хвост одинаковы. Это не работает, потому что вторая a
связана как новая переменная (и соответствует чему-либо). Существуют ли какие-либо шаблонные формы, которые позволяют мне использовать ранее связанный a
из внешней области?
Я знаю, что это может быть достигнуто следующим образом
(match* ('cat 'doge)
[(a a) #t]
[(_ _) #f])
но мне все же хотелось бы знать, есть ли способ получить эту переменную из внешней области (или если есть причина не делать этого, например, потенциальная проблема столкновения имен или что-то в этом роде).
Используйте ==
:
(match '(cat . doge)
[`(,a . ,b)
(match b
[(== a) #t]
[_ #f])]
[_ "Not a pair"])
Из-за размещения в документах ==
легко пропустить.