Mathematica里是可以在一个函数里包含多条语句的,只要使用 ; 和 () 就行!一个简例(这当然只是个例子,Abs已经内置了):
abs[c_] :=
(re = Re[c];
im = Im[c];
Sqrt[re^2 + im^2])
abs[1 + I]

看到这里,吧里的老人大概会会心一笑,而其他人想必是一头雾水:这帖标题不是要说换行吗,这跟你上面说的东西有什么关系?当然有关系,请耐心往下看。
Mathematica里其实有三种换行,它们是:
1. “完整语句”外的换行。这种换行代表了语句的结束。比如下图

这里的 a 和 b 由换行分隔成了两条语句。(这点由前面的行号54和55也可以看出来:每个行号都对应了一条完整语句。)
2. “完整语句”内的换行。这种换行仅仅是一种排版(语句较长时适当换行可以使代码变得易读),不能分隔语句,比如下图

Log[2,
4]内部有一处换行,但并未影响输出。
换行的前后如果没有逗号或其他算符,Mathematica会认为我们在做乘法,比如:

当然了,这种换行并非毫无限制,比如二元算符得在上面那行,否则会出错:

如上所示,前一种写法被正确认作a除b了,而后者软件报错。
“那么,你手里有没有完整的限制列表呢?”很遗憾,没有,自带文档里好像也没写。(顺便,深究起来,自带文档对某些极度基础的内容确实缺乏明确的叙述,个人认为这其实是对自学造成了障碍的。)不过,Mathematica的笔记本在宽度不够时默认进行的就是这种排版,所以手调笔记本宽度不失为一种确认排版规则的方法。
好的,重点来了。我们知道,Mathematica代码纵然看上去千奇百怪,但实质上都是形如 a[b,c,…] 的结构的无限嵌套。这种嵌套可以使用FullForm来检查。比如:

又比如

你没看错,分号在Mathematica里其实是个函数。
自定义函数也不例外:

明白这意味着什么吗?这意味着你在定义一个函数时,不同于MATLAB或是fortran或是其他的啥,你是不能靠换行来分隔语句的。“没错!所以Mathematica定义函数时是不能写多条语句的! -> Mathematica里是不能定义复杂函数的!-> Mathematica搞不了正经编程! -> Mathematica是个计算器!”——这便是Mathematica初学者次常见掉坑路径之一。“那么在一个函数内写下多条语句的正确方法到底是啥呢?”这便回到了我们开头的话题。
顺便,自带文档中也存在着大量的“复杂”函数定义示例,稍微多看两眼就能遇到,比如下面的例子,出自“ = ”的文档:

所以说,最后还是那句老话,自带帮助是最好的教材。
abs[c_] :=
(re = Re[c];
im = Im[c];
Sqrt[re^2 + im^2])
abs[1 + I]

看到这里,吧里的老人大概会会心一笑,而其他人想必是一头雾水:这帖标题不是要说换行吗,这跟你上面说的东西有什么关系?当然有关系,请耐心往下看。
Mathematica里其实有三种换行,它们是:
1. “完整语句”外的换行。这种换行代表了语句的结束。比如下图

这里的 a 和 b 由换行分隔成了两条语句。(这点由前面的行号54和55也可以看出来:每个行号都对应了一条完整语句。)
2. “完整语句”内的换行。这种换行仅仅是一种排版(语句较长时适当换行可以使代码变得易读),不能分隔语句,比如下图

Log[2,
4]内部有一处换行,但并未影响输出。
换行的前后如果没有逗号或其他算符,Mathematica会认为我们在做乘法,比如:

当然了,这种换行并非毫无限制,比如二元算符得在上面那行,否则会出错:

如上所示,前一种写法被正确认作a除b了,而后者软件报错。
“那么,你手里有没有完整的限制列表呢?”很遗憾,没有,自带文档里好像也没写。(顺便,深究起来,自带文档对某些极度基础的内容确实缺乏明确的叙述,个人认为这其实是对自学造成了障碍的。)不过,Mathematica的笔记本在宽度不够时默认进行的就是这种排版,所以手调笔记本宽度不失为一种确认排版规则的方法。
好的,重点来了。我们知道,Mathematica代码纵然看上去千奇百怪,但实质上都是形如 a[b,c,…] 的结构的无限嵌套。这种嵌套可以使用FullForm来检查。比如:

又比如

你没看错,分号在Mathematica里其实是个函数。
自定义函数也不例外:

明白这意味着什么吗?这意味着你在定义一个函数时,不同于MATLAB或是fortran或是其他的啥,你是不能靠换行来分隔语句的。“没错!所以Mathematica定义函数时是不能写多条语句的! -> Mathematica里是不能定义复杂函数的!-> Mathematica搞不了正经编程! -> Mathematica是个计算器!”——这便是Mathematica初学者次常见掉坑路径之一。“那么在一个函数内写下多条语句的正确方法到底是啥呢?”这便回到了我们开头的话题。
顺便,自带文档中也存在着大量的“复杂”函数定义示例,稍微多看两眼就能遇到,比如下面的例子,出自“ = ”的文档:

所以说,最后还是那句老话,自带帮助是最好的教材。




