Functional programming 为什么Mathematica函数的行为是这样的?

Functional programming 为什么Mathematica函数的行为是这样的?,functional-programming,wolfram-mathematica,Functional Programming,Wolfram Mathematica,我真的被这个函数的行为弄糊涂了: david[x_] := 5; 6; 7 david[] 返回 7 但是david[3]返回5 为什么会发生这种情况?我认为第二个案例也应该返回7;为什么不呢 令人惊讶的是,该函数没有出现异常。事实上,它的行为是正确的。定义函数david后,用分号终止它,然后是一个常数(6),其值被分号抑制,然后是一个未抑制的常数。因此,当您尝试计算单元格时,函数david的值设置为每次运行时给出5: david[x_] := 5; (* This is where t

我真的被这个函数的行为弄糊涂了:

david[x_] := 5; 6; 7

david[] 
返回

7
但是
david[3]
返回
5


为什么会发生这种情况?我认为第二个案例也应该返回7;为什么不呢

令人惊讶的是,该函数没有出现异常。事实上,它的行为是正确的。定义函数david后,用分号终止它,然后是一个常数(6),其值被分号抑制,然后是一个未抑制的常数。因此,当您尝试计算单元格时,函数david的值设置为每次运行时给出5:

david[x_] := 5; (* This is where the 5 comes from when you try to evaluate the cell*)
得到7是因为有一个未抑制的常数。

与此相比:

david[x_] := 5; 6; 7; 9; 12; (* 6, 7, 9 and 12 will never show up, since they are suppressed *)
与:

david[x_] := 5; 6; 7; 9; 12; 17 (* 17 will **always** show up, since it is unsuppressed *)

你所观察到的是Mathematica语言的一个怪癖

否:行“david[x]:=5;6;7”返回7。david[]返回david[]--你没注意到那行吗?(您没有提到任何关于0参数函数的内容,因此它不会求值)。那么,如何创建使用多个状态的函数呢?使用Switch。示例(取自此处):
r[x]:=开关[Mod[x,3],0,a,1,b,2,c]
运行时,将根据输入数字的Mod返回值(a,b或c)。示例:Mo[7,3]返回2,因此r[10]的返回值将是b(上面定义的情况2的返回值)。我的意思是,我希望生成真正具有多个station的函数。就像真实程序中的方法一样。e、 函数doSomething(){result;操纵结果;进一步计算结果;再次;返回结果;}您不需要使用模块。例如
f[x]:=(Print@x; Print@x); f[4]
将函数设为“块”(或“模块”)-它可以任意长,可以包含任意多个语句,并且有一个“返回值”(通过“return”关键字,或作为“块”的最终值)。正如belisarius所说,“mathematica.stackexchange.com”绝对是一个好去处。