怎么实现对函数的模式匹配?
mathematica吧
全部回复
仅看楼主
level 9
m绸雨 楼主
现在有一个list,里面是一些0和未定义函数表达式。我想把非零元素都替换成1,但是对于表达式的匹配总是失败,所以想请教一下该怎么写。以下是示例代码:
{u[0, 1]*v[1, 1], c[1, 2], 0, 0, 0} /. {x_ /; x != 0 -> 1}
这行代码未能达到预期目的,我用MatchQ试了一下,发现类似于u[1,0]这样的式子既不是0也不是非零,是不是说mma也无法决定u[1,0]是什么(因为函数u未定义)?
2019年04月24日 06点04分 1
level 2
!=改成=!=就行了
2019年04月25日 02点04分 2
……你只这样会匹配到整个列表。
2019年05月04日 06点05分
level 7
你想要什么结果?就以你的例子为例。
2019年04月25日 07点04分 5
吧务
level 7
Replace[{u[0,1]*v[1,1],c[1,2],0,0,0},x_/;If[x!=0,True,False,True]->1,{1}]
2019年04月25日 08点04分 7
level 7
u[1,0] 没计算的话没法判断是否非零吧
2019年04月26日 06点04分 8
吧务
level 15
用Except也是可以的。
Replace[{u[0, 1]*v[1, 1], c[1, 2], 0, 0, 0}, Except[0] -> 1, {1}]
2019年05月04日 06点05分 9
1