Phi*_*hil 3 types wolfram-mathematica function
我已经多次针对mathematica理解函数的输入数据声明类型遇到了这个问题.
似乎Mathematica理解以下类型声明:_Integer,_List,_?MatrixQ,_?VectorQ
但是:_Real,_Complex声明例如导致函数有时不计算.知道为什么吗?
这里的一般规则是什么?
acl*_*acl 10
当你做类似的事情时f[x_]:=Sin[x],你正在做的是定义一个模式替换规则.如果您改为说f[x_smth]:=5(如果您同时尝试两者,请Clear[f]在第二个示例之前执行),您实际上是在说"无论您在哪里,都要f[x]检查是否x是smth,如果是,则替换为5".比如试试吧
Clear[f]
f[x_smth]:=5
f[5]
f[smth[5]]
Run Code Online (Sandbox Code Playgroud)
所以,为了回答你的问题,规则是in f[x_hd]:=1;,hd可以是任何东西,并且与x的头部相匹配.
人们也可以有更复杂的定义,例如f[x_] := Sin[x] /; x > 12,如果x> 12,那么它们将匹配(当然这可以任意复杂化).
编辑:我忘记了Real部分.你当然可以定义Clear[f];f[x_Real]=Sin[x]它,例如f [12.].但你要记住,尽管Head[12.]是Real,Head[12]是Integer,让你的定义不匹配.
只是一个快速的说明,因为没有人提到它.你可以模式匹配多个Heads - 这比使用?或的条件匹配更快/;.
f[x:(_Integer|_Real)] := True (* function definition goes here *)
Run Code Online (Sandbox Code Playgroud)
对于作用于Real或Integer参数的简单函数,它在大约75%的时间内作为类似的定义运行
g[x_] /; Element[x, Reals] := True (* function definition goes here *)
Run Code Online (Sandbox Code Playgroud)
(正如WReach指出的那样,75%的时间都
在运行 g[x_?(Element[#, Reals]&)] := True).
后一种形式的优点是它可以使用符号常量,例如Pi- 虽然如果你想要一个纯粹的数字函数,这可以用前者的形式修复N.
| 归档时间: |
|
| 查看次数: |
1403 次 |
| 最近记录: |