问题描述
如何在方案中使用car
对一个con对对(cdr
和match-lambda
)和整个con对进行模式匹配?我正在寻找一种简洁,优雅的方法来提取缺点对并同时引用整个缺点对。
问题可以分为两个问题
- 如何在方案中对对对分量(
car
和cdr
)进行模式匹配? - 如何使用
match-lambda
在单个引用中捕获带有匹配成分的整个模式匹配表达式?我知道可以在match
内使用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])
解决方法
如果匹配器完全可以匹配缺点对,那么您需要使用and
模式:
(match-lambda
[(and whole
(cons a b))
;; whole,a,b bound here
...]
...)
将使用Racket的match-lambda
。
似乎不同的实现有不同的语法来匹配conses(而不是适当的列表),例如,我不清楚Guile's可以,但是它们似乎都具有and
,表示“所有模式都必须匹配,并绑定适当的标识符”。
(我认为,一个不会让您匹配conses的实现对个人而言没有用,所以我希望它们都可以。但是,我确实不是Scheme人。)