球拍图案搭配套装
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
我想知道在 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