首页 > 解决方案 > 方案模式匹配 - 同时匹配 cons pair 组件和整个 cons pair

问题描述

如何在方案中使用 cons 对组件 ( carand cdr) 和整个 cons 对进行模式匹配match-lambda?我正在寻找一种简洁优雅的方式来提取 cons 对组件并同时引用整个 cons 对。

这个问题可以分成两个问题

  1. 如何在方案中对组件 (carcdr) 进行模式匹配?
  2. 如何使用匹配的组件在单个引用中捕获整个模式匹配表达式match-lambda?我知道上面可以使用matchinside来完成lambda

我试过以下没有运气

(match-lambda
  [(car-component . cdr-component) ... use car-component and cdr-component])

理想情况下,我正在寻找类似的东西

(match-lambda
  [((car-component . cdr-component) as whole-pair) ... use car-component, cdr-component, and whole pair])

标签: pattern-matchingschemedestructuring

解决方案


如果匹配器完全可以匹配 cons 对,那么您需要一个and模式:

(match-lambda
  [(and whole
        (cons a b))
   ;; whole, a, b bound here
   ...]
  ...)

将使用 Racket 的match-lambda.

看起来不同的实现有不同的语法来匹配 conses 而不是正确的列表,我不清楚,例如,Guile可以,但它们似乎都有and,这意味着“所有模式必须匹配,绑定合适的标识符'。

(我认为一个不允许你匹配 conses 的实现对个人来说有点无用,所以我希望他们都这样做。但我不是一个 Scheme 的人,真的。)


推荐阅读