Scheme 重写匹配lambda

Scheme 重写匹配lambda,scheme,racket,match,Scheme,Racket,Match,作为练习,我试图定义一个规则match rewriter,其行为与match lambda相同,但如果未找到匹配项,则返回其参数。到目前为止,我有: (define-syntax match-rewriter (syntax-rules () ((_ (patt body) ...) (λ (x) (match x (patt body) ...))))) 如果找到匹配项,它似乎工作得很好 但是,如果没有找到匹配项,我不知道如何返回参数x 我知道如果没有找到匹配项,ma

作为练习,我试图定义一个规则
match rewriter
,其行为与
match lambda
相同,但如果未找到匹配项,则返回其参数。到目前为止,我有:

(define-syntax match-rewriter
  (syntax-rules ()
    ((_ (patt body) ...)
      (λ (x) (match x (patt body) ...)))))
如果找到匹配项,它似乎工作得很好

但是,如果没有找到匹配项,我不知道如何返回参数
x


我知道如果没有找到匹配项,match将抛出异常。但是我不知道如何捕捉它,如果存在,我希望有一个更简单的解决方案。

如果这个问题是关于“的
匹配”
,那么只需添加一个匹配任何内容的子句即可:

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

如果此问题与的
match
有关,则只需添加一个与任何内容匹配的子句:

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