mri*_*rig 15 wolfram-mathematica
我想知道,如何评估Mathematica中函数中的多个语句.
例如
f[x_]:=x=x+5 and then return x^2
Run Code Online (Sandbox Code Playgroud)
我知道这可以修改为,(x+5)^2但最初我想从函数中的文件中读取数据并在执行一些数据操作后打印结果.
Sjo*_*ies 17
如果你想组合几个命令并输出最后一个使用它们之间的分号(;),比如
f[y_]:=(x=y+5;x^2)
Run Code Online (Sandbox Code Playgroud)
只是不要使用; 最后的陈述.
如果您的命令集变大,您可能希望使用诸如Module或Block之类的作用域结构.
您正在寻找CompoundExpression(简短形式;):
f[x_]:= (thing = x+5 ; thing^2)
Run Code Online (Sandbox Code Playgroud)
由于优先级非常低,括号是必要的;.
正如Szabolcs打电话给我,你不能写:
f[x_]:= (x = x+5 ; x^2)
Run Code Online (Sandbox Code Playgroud)
请参阅此答案以获取解释和替代方案.
你应该听取的列昂尼德说,thing应该是本地化的.我上面没有这样做,因为我想强调CompoundExpression一下你的"然后"构造的特定适合性.正如它所写,这将影响全球价值,thing其中可能或可能不是你真正想做的事情.如果不是,请参阅上面链接的答案,以及:
有几个人已经提到过你可以使用CompoundExpression:
f[x_] := (y=x+5; y^2)
Run Code Online (Sandbox Code Playgroud)
但是,如果x在表达式中使用与参数中相同的变量,
f[x_] := (x=x+5; x^2)
Run Code Online (Sandbox Code Playgroud)
然后在用数字评估函数时会出错.这是因为:=基本上定义了lhs中模式变量的替换,即f[1]评估为(不正确)(1 = 1+5; 1^2).
所以,正如Sjoerd所说,使用Module(或Block有时,但这个有警告!)来本地化一个函数变量:
f[x_] := Module[{y}, y=x+5; y^2]
Run Code Online (Sandbox Code Playgroud)
最后,如果您需要一个修改其参数的函数,那么您可以设置该属性HoldAll:
Clear[addFive]
SetAttributes[addFive, HoldAll]
addFive[x_] := (x=x+5)
Run Code Online (Sandbox Code Playgroud)
然后用它作为
a = 3;
addFive[a]
a
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19881 次 |
| 最近记录: |