公告:1)网站程序升级:Q2A升级到1.8.6,Wordpress升级到5.7.2
2)修复了头像加载慢与提交问题反应慢等问题
2021-06-16

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

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

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

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

社区建议QQ群:365716997

分类

+2 投票
606 浏览

在 Mathematica 中,一般的函数名(头部)都可以用 /. 来替换,有时需要加上此函数不做运算的限定,比如:

mm01=Graphics[Circle[]];
mm01/.(Graphics->ff)

其结果是:

ff[Circle[{0,0}]]

但 MeshRegion 这个函数这样替换就不行:

mm02=MeshRegion[{{0},{1}},{Point[{{1},{2}}]}];
mm02/.MeshRegion->ff

结果仍然是mm02本身,根本没有任何替换。

如果换种写法:

Unevaluated[mm02]/.MeshRegion->ff

一样不行。

所以这个 MeshRegion 还真是怪异。

谁可以解释一下并给出个办法完成替代?

【 注:在第二个代换那行代码中,如果直接用mm02的表达式是可以成功替换的;但这里要求只能使用符号mm02。】

分类:其它 | 用户: wonderlands0 (451 分)
重新分类 用户:wonderlands0

1个回答

+3 投票
 
已采纳

因为Region类对象是Atom,所以替换、Apply之类的方法都无效

解决方法如下

In[90]:= mm02 /. 
 region_MeshRegion :> 
  ToExpression[
   StringReplace[ToBoxes[InputForm@region][[1, 1]], 
    "MeshRegion" -> "ff"]]

Out[90]= ff[{{0.}, {1.}}, {Point[{{1}, {2}}]}]

参考https://mathematica.stackexchange.com/questions/147728/why-dont-part-apply-and-other-standard-tools-work-with-region-objects/147993#147993

用户: 无影东瓜 (1.2k 分)
采纳于 用户:wonderlands0
这么回事啊!: )
我在SE搜过MeshRegion几次,也还是没抓到链接里那个帖子。Thanks!
...