gpt4 book ai didi

pattern-matching - SymPy 中所有可能匹配项的集合

转载 作者:行者123 更新时间:2023-12-03 23:38:56 24 4
gpt4 key购买 nike

我想以返回所有可能匹配项的方式将模式与表达式匹配。使用 SymPy,我可以以一种任意选择的方式将我的模式与我的表达式匹配。我如何使用模式匹配来获取整个集合(直到任意重命名)

目前我可以做到这一点

>>> p, q = Wild('p'), Wild('q')
>>> x, y, z = symbols('x,y,z')

>>> (p+q).matches(x+y+z)
{p: y + z, q: x}

我想做这个

>>> (p+q).allmatches(x+y+z)
{{p: x, q: y + z}, {p: y, q: x + z}, {p: z, q: x + y}}

请注意,每个可能的分区都已表示。我愿意自己实现。产生所有可能匹配的模式匹配标准算法是什么?

最佳答案

我认为您必须使用所有可能的排除集来定位匹配项,例如

In [16]: [(x + y + z).match(Wild('p', exclude=i) + Wild('q', exclude=set([x, y, z]) - set(i))) for i in subsets([x, y, z])]
Out[16]: [{p: x + y + z, q: 0}, {p: y + z, q: x}, {p: x + z, q: y}, {p: x + y, q: z}, {p: z, q: x + y}, {p: y, q: x + z}, {p: x, q: y + z}, {p: 0, q: x + y + z}]

(subsets 是来自 sympy.utilities.iterables 的 SymPy 函数)。

关于pattern-matching - SymPy 中所有可能匹配项的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13036336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com