Я пытаюсь использовать match
на шаблоне ввода пользователя, вместо того, чтобы статическим.Соответствие по шаблону ввода пользователя
Идея заключается в том, чтобы расширить:
(rule-match '(a (or '< '=) b) '(list a b) '(3 < 4))
Для
(match '(3 < 5) [(list a (or '< '=) b) (list a b)])
Я не очень хорошо знакомы с макро и попытался следующее:
(define-syntax (rule-match stx)
(syntax-case stx()
[(_ pat act input)
(with-syntax ([pattern-syntax (syntax (cons 'list pat))]
[action-syntax (syntax act)])
#'(match input [pattern-syntax action-syntax]))]))
Но получаю ошибку match: no matching clause for '(3 < 4)
У кого-нибудь есть намек на это?
Спасибо за ответ, но мне нужен прецедент, в котором вы должны передать переменную функции '(правильное совпадение с некоторым-var-pattern-некоторым-var-action-вводом), которое, я думаю, не сработает с этим реализация. – mathk
erm ... передать переменную? Можете ли вы рассказать о своем примере, чтобы показать, что вы имеете в виду? –
Ах! вы хотите, чтобы пользователь мог передавать шаблоны в виде значений времени выполнения? Похоже, вы должны просто написать свой собственный шаблон-матчер для этого. В частности, вы будете заниматься вопросами гигиены; если вы разрешаете пользователю проходить произвольные шаблоны и шаблоны, очевидная реализация не сможет отслеживать гигиену. –