【问题标题】:racket pattern matching set球拍图案匹配套装
【发布时间】:2021-09-14 14:47:29
【问题描述】:

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

【问题讨论】:

    标签: pattern-matching racket


    【解决方案1】:

    您可以使用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

    【讨论】:

    • 我假设 CAS 的意思是“计算机代数系统”...?
    猜你喜欢
    • 2019-10-27
    • 2011-10-27
    • 2014-07-06
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 2020-06-19
    • 2017-09-28
    相关资源
    最近更新 更多