早教吧 育儿知识 作业答案 考试题库 百科 知识分享

mathematica这样用Alternatives不行吗?abs[x(Integer|Rational|Complex)]:=Norm[x]abs[1+I]和abs[1,2]都不行但是这种模式每一个都是独立的模式,不管别的是否匹配,只要自己匹配上就会应用上不是吗?可是Ma

题目详情
mathematica这样用Alternatives不行吗?
abs[x (_Integer | _Rational | _Complex)] := Norm[x] abs[1+I]和abs[1,2]都不行
但是这种模式每一个都是独立的模式,不管别的是否匹配,只要自己匹配上就会应用上不是吗?
可是MatchQ[x^2,x^(_Real|_Integer)]回答是True啊
▼优质解答
答案和解析
那是你没用对,可以如下的方法
abs[x :_Integer | _Rational | _Complex] := Norm[x]
或者
abs[x_Integer | x_Rational | x_Complex] := Norm[x]
至于为何 abs[1,2] 不行,那是因为你定义的模式匹配的是整数 | 有理数 | 复数,当然匹配不了序列,最后的那个匹配正确是没有问题的啊.建议你看一下模式的命名.