球拍图案搭配套装

racket pattern matching set

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

您可以使用 list-no-order。不过,它只适用于小场景。

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

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

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

结果将是:

(+ 3 a b)

如果你有兴趣自己写一个CAS,我推荐 购买或借用科恩的两本书。

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