pattern-matching - 球拍图案匹配套装
问题描述
我想知道与 Racket 中的一组匹配的模式是可能的吗?我的某些情况是代数恒等式,例如,2*a
可以是a+a
。但是,目前,我匹配list
然后我必须写(or (list '* 2 a) (list '* a 2))
. 如果匹配 onset
是可能的,那么我可以拥有(set '* 2 a)
,这更容易。
解决方案
您可以使用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
推荐阅读
- r - 双 Y 轴图中每个条的月份和年份:geom_bar、geom_line
- python - OSError:无法识别图像文件(某些图像存在问题)
- python - qbittorrent 应用程序的 Web UI 上的 Selenium 自动化“无法定位元素”错误
- discord - 我怎样才能制作一个不和谐的机器人,当他们加入服务器时,他们会 DM 新用户?
- php - PHP | 谷歌验证码文件
- angular - 如何在 docker 容器上运行单个 spa 应用程序
- html - 悬停过渡时移动的文本
- react-native - 无法在 react-native-bottom-sheet 中使底片的角变圆
- python - Python:在我的 Visual Studio Code 上找不到选择解释器命令
- react-native - 当连接返回 react-native-offline 时优先 actionQueue