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

—— 2022-11-27

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

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

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

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

社区建议QQ群:365716997

分类

+2 投票
1.1k 浏览
In[87]:= Unprotect[Times];
Times[f[t_]/t_, x___] := Times[x]
f[t]/(a c t)
MatchQ[f[t]/(a c t), Times[f[t_]/t_, x___]]

Out[89]= f[t]/(a c t)

Out[90]= True


如上代码所示,模式匹配成功了,却还保持原值不变!\(\frac{f(t)}{a c t}\)应化简为为\(\frac{1}{a c}\)才对!

分类:其它 | 用户: niturpe (251 分)
修改于 用户:niturpe

1个回答

+1 投票
 
已采纳

首先,修改系统函数,尤其是这种非常基础,并且已经内含了非常复杂的匹配规则的算术函数,是非常危险的。

然后,你非要改也该这么改:

Times[f[t_], t_^-1, x___] := Times[x]

或者

Evaluate@Times[f[t_]/t_, x___] := Times[x]

MatchQ能够顺利匹配是因为它没Hold系列属性,所以第二个参数自动计算了一次,模式也跟着变了。还不明白为什么的话,请去查查函数定义的

DownValues@Times // FullForm

 

用户: xzczd (2.2k 分)
采纳于 用户:niturpe
谢谢,弄明白了!
...