我想知道如何评估Mathematica中函数中的多个语句 E.g。
f[x_]:=x=x+5 and then return x^2
我知道这很多可以修改为(x+5)^2
但最初我想从函数中的文件中读取数据并在进行一些数据操作后打印结果。
答案 0 :(得分:17)
如果要对几个命令进行分组并输出最后一个命令,请在它们之间使用分号(;),如
f[y_]:=(x=y+5;x^2)
只是不要使用;最后的陈述。
答案 1 :(得分:7)
您正在寻找CompoundExpression
(简称;
):
f[x_]:= (thing = x+5 ; thing^2)
由于;
的优先级非常低,所以必须使用括号。
当Szabolcs打电话给我时,你不能写:
f[x_]:= (x = x+5 ; x^2)
请参阅this answer以获取解释和替代方案。
Leonid,你应该听谁说,thing
应该是本地化的。我之前没有这样做,因为我想强调CompoundExpression
特别适合你的“然后”构造。如上所述,这将影响thing
的全球价值,这可能是您实际想要做的事情,也可能不是。如果不是,请参阅上面链接的答案,以及:
答案 2 :(得分:6)
有些人已经提到您可以使用CompoundExpression
:
f[x_] := (y=x+5; y^2)
但是,如果在表达式中使用与参数中相同的变量x
,
f[x_] := (x=x+5; x^2)
然后在用数字评估函数时会出错。这是因为:=
基本上定义了来自lhs的模式变量的替换,即f[1]
评估为(不正确)(1 = 1+5; 1^2)
。
所以,正如Sjoerd所说,使用Module
(或Block
有时,但this one has caveats!)来本地化函数变量:
f[x_] := Module[{y}, y=x+5; y^2]
最后,如果您需要一个修改其参数的函数,那么您可以设置属性HoldAll
:
Clear[addFive]
SetAttributes[addFive, HoldAll]
addFive[x_] := (x=x+5)
然后将其用作
a = 3;
addFive[a]
a