pattern-matching - 方案模式匹配 - 同时匹配 cons pair 组件和整个 cons pair
问题描述
如何在方案中使用 cons 对组件 ( car
and cdr
) 和整个 cons 对进行模式匹配match-lambda
?我正在寻找一种简洁优雅的方式来提取 cons 对组件并同时引用整个 cons 对。
这个问题可以分成两个问题
- 如何在方案中对组件 (
car
和cdr
) 进行模式匹配? - 如何使用匹配的组件在单个引用中捕获整个模式匹配表达式
match-lambda
?我知道上面可以使用match
inside来完成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])
解决方案
如果匹配器完全可以匹配 cons 对,那么您需要一个and
模式:
(match-lambda
[(and whole
(cons a b))
;; whole, a, b bound here
...]
...)
将使用 Racket 的match-lambda
.
看起来不同的实现有不同的语法来匹配 conses 而不是正确的列表,我不清楚,例如,Guile可以,但它们似乎都有and
,这意味着“所有模式必须匹配,绑定合适的标识符'。
(我认为一个不允许你匹配 conses 的实现对个人来说有点无用,所以我希望他们都这样做。但我不是一个 Scheme 的人,真的。)
推荐阅读
- argo-workflows - Argo Workflow - 在步骤之间共享机器
- c - C:通过 OpenSSL 的 POP3 STLS
- asp.net - 我不知道为什么浏览器给我 404 错误
- php - .htaccess 使用多个 PHP 常量设置 error_reporting
- swift - Mapbox Snapshotter 和 Swift 并发
- rust - 如何检查错误类型是否与 Rust 中的特定错误类型匹配?
- video.js - video.js 无法使用来自 Https 网站的 rtmp
- excel - 在 VBA 中使用 Len 和左(或中)
- javascript - 我想在特定的数据点使用 mathjax 和 react native render html 。我使用了自定义 HTML 标签,但在标签内找不到数据
- angular - Angular Sat-popover - 弹出框内的可点击内容和悬停