переписывать матч-лямбду - PullRequest
0 голосов
/ 22 февраля 2011

В качестве упражнения я пытаюсь определить правило match-rewriter, которое ведет себя так же, как match-lambda, но возвращает свой аргумент, если совпадение не найдено. Пока у меня есть это:

(define-syntax match-rewriter
  (syntax-rules ()
    ((_ (patt body) ...)
      (λ (x) (match x (patt body) ...)))))

, который, кажется, отлично работает, если найдено совпадение.

Но я не могу понять, как вернуть аргумент x, если совпадение не найдено.

Я знаю, что совпадение вызовет исключение, если совпадение не найдено. Но я не могу понять, как его поймать, и мне хотелось бы более простого решения, если оно существует.

1 Ответ

4 голосов
/ 22 февраля 2011

Если этот вопрос касается Ракетки match, просто добавьте предложение, которое соответствует чему-либо:

(match x [patt body] ... [_ x])
...