公告:本站正式转型为非交互式静态网站!
转型:本站将通过笔记和博客的形式继续为大家服务,关于 Mathematica 问答服务请移步至QQ群:365716997
联系:如有问题请联系QQ群管理员,或发送邮件至:lixuan.xyz@qq.com。
感谢:最后非常感谢大家多年来的支持与帮助!
参考《互联网跟帖评论服务管理规定》《中华人民共和国网络安全法》《网络信息内容生态治理规定》《互联网用户账号信息管理规定》

—— 2022-11-27

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

0 投票
2.0k 浏览
<< ComputationalGeometry`
data = RandomReal[20, {18, 2}];
hull = ConvexHull[data];
data[[hull]]
data[[hull]] /. {p1_, pn_} :> {p1, pn, p1}
data[[hull]] /. {p1_, pn__} :> {p1, pn, p1}

{{19.5823, 15.3662}, {7.74479, 18.5816}, {4.25728, 18.9584}, {1.13327,
   16.127}, {0.577461, 4.99933}, {2.20899, 4.2099}, {13.5874, 
  0.706739}, {15.9757, 1.48185}}
  
  {{19.5823, 15.3662, 19.5823}, {7.74479, 18.5816, 7.74479}, {4.25728, 
  18.9584, 4.25728}, {1.13327, 16.127, 1.13327}, {0.577461, 4.99933, 
  0.577461}, {2.20899, 4.2099, 2.20899}, {13.5874, 0.706739, 
  13.5874}, {15.9757, 1.48185, 15.9757}}
  
  {{19.5823, 15.3662}, {7.74479, 18.5816}, {4.25728, 18.9584}, {1.13327,
   16.127}, {0.577461, 4.99933}, {2.20899, 4.2099}, {13.5874, 
  0.706739}, {15.9757, 1.48185}, {19.5823, 15.3662}}

在进行模式匹配的元素替换中,pn_与pn__到底是怎么操作数据的,关键在于pn__是怎么换到下一点的。

我读明白了双下划线代表该位置必须有一个或者以上的元素,但还是搞不明白在这个例子中和单下划线的区别,请问谁能详细的解释一下?

用户: 落雨流觞 (1.1k 分)

1个回答

+1 投票
运行:{{a, b}, {c, d}, {e, f}} /. {p1_, pn__} :> {p1, pn, p1}
得到:{{a, b}, {c, d}, {e, f}, {a, b}}

在这里{a, b}匹配到p1,而后面的{c, d}, {e, f}匹配到pn,所以{p1_, pn__} :> {p1, pn, p1}就相当于第一个列表元素填充到列表尾。

 

用户: jiaoeyushushu (161 分)
那么单独的pn_又为什么不会匹配到{c,d},{e,f}呢?我的疑问就是他们之间的却别和联系
单下划线只能匹配一个元素啊,你都说了双下划线菜匹配多个的。
好的,有点明白。{{a,b,a},{c,d,c}}如果是这样的话,那么匹配中pn__双划线是说匹配List中的两个,还是说匹配嵌套的里面那个List中的{a,b,a}呢?
...