gpt4 book ai didi

wolfram-mathematica - Mathematica 中 PatternTest 的意外行为

转载 作者:行者123 更新时间:2023-12-04 00:57:05 25 4
gpt4 key购买 nike

我正在研究玩具问题,以帮助我理解 Mathematica 中模式匹配的想法。以下代码的行为不符合我的预期,我无法弄清楚我对 PatternTest 的理解有什么问题。

MatchQ[{2, 1, 2, 5}, {x__?(FromDigits[{#}] > 3 &), y__}]

我希望这段代码检查列表 {2,1,2,5}可以写成两个连续的(非空)序列,使得我们从第一个序列得到的整数大于 3。由于 {Sequence[2,1],Sequence[2,5]}是重写列表的一种方法,使得 FromDigits[{2,1}] > 3持有,我希望该代码返回值 True .然而,事实并非如此。

我对代码的解释有什么问题?

最佳答案

PatternTest 的文档(又名 ?)说

In a form such as __?test every element in the sequence matched by __ must yield True when test is applied.



因此,您的代码不会像您希望的那样工作。

查看模式如何工作的一个好方法是使用 ReplaceList .
接近你的代码的东西是
In[1]:= ReplaceList[{3, 4, 2, 1}, 
{___, x__?(FromDigits[{##}] > 3 &), y___} :> {{x}, {y}}]

Out[1]= {{{4}, {2, 1}}}

但是,如果您使用 Condition (/;)而不是模式测试,那么您可以获得您正在寻找的行为
In[2]:= ReplaceList[{3, 4, 2, 1}, 
{___, x__, y___} :> {{x}, {y}} /; FromDigits[{x}] > 3]

Out[2]= {{{3, 4}, {2, 1}}, {{3, 4, 2}, {1}}, {{3, 4, 2, 1}, {}},
{{4}, {2, 1}}, {{4, 2}, {1}}, {{4, 2, 1}, {}}, {{2, 1}, {}}}

关于wolfram-mathematica - Mathematica 中 PatternTest 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8468072/

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