首页 > 解决方案 > 球拍图案匹配套装

问题描述

我想知道与 Racket 中的一组匹配的模式是可能的吗?我的某些情况是代数恒等式,例如,2*a可以是a+a。但是,目前,我匹配list然后我必须写(or (list '* 2 a) (list '* a 2)). 如果匹配 onset是可能的,那么我可以拥有(set '* 2 a),这更容易。

标签: pattern-matchingracket

解决方案


您可以使用list-no-order. 不过,它仅用于小型套装。

在需要处理数学表达式的程序中,标准技术是在使用任何匹配之前“规范化”表达式。她的“规范化”是指按照某种顺序对参数进行“排序”。

racket-cas规范化中会将数字放在符号之前。并按字母顺序对符号进行排序。

#lang racket
(require racket-cas)
(normalize '(+ b 3 a))

结果将是:

(+ 3 a b)

如果您有兴趣自己编写 CAS,我建议您购买或借用 Cohen 的两本书。

https://www.amazon.com/Joel-S-Cohen/e/B001K8MI06/ref=dp_byline_cont_pop_ebooks_1


推荐阅读