mathematica函数中的多个语句

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)

只是不要使用; 最后的陈述.

如果您的命令集变大,您可能希望使用诸如ModuleBlock之类的作用域结构.

  • 我认为无论程序大小如何,都应该对变量进行本地化,因为程序确实在发展,而非本地化的变量是一个麻烦的邀请. (2认同)

Mr.*_*ard 7

您正在寻找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其中可能或可能不是你真正想做的事情.如果不是,请参阅上面链接的答案,以及:

  • 这太荒谬了.我想知道Wizard先生是否发现了时间旅行的秘密. (2认同)

Sza*_*lcs 6

有几个人已经提到过你可以使用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)

  • @newGuy 我发现 Mathematica 文档与我见过的大多数其他程序相比非常出色。在文档浏览器中输入“tutorial/SequencesOfOperations”,然后单击“虚拟书籍”按钮。 (2认同)