2012-10-09 29 views
1

我真的在此函数的行为感到困惑:为什么这个Mathematica函数的行为如此?

david[x_] := 5; 6; 7 

david[] 

回报

7 

david[3]回报5

为什么会出现这种情况?我认为第二种情况也应该返回7;为什么不呢?

+0

号:行了 “大卫[X_]:= 5; 6; 7” 返回7.大卫[]返回大卫[] - 你没有注意到这条线? (你没有说任何关于0参数函数的东西,所以它没有评估)。 – librik

回答

2

令人惊讶的是,该功能并没有失常。事实上,它的行为是正确的。在你定义函数david后,你用一个分号终止它,然后是一个常数(6),它的值被分号抑制,然后是一个不被抑制的常量。因此,当你试图评估细胞的功能大卫的值设置为给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语言的怪癖之一。

+0

那么如何创建使用多个语句的函数呢? – David

+0

通过使用开关。实施例(从这里取出):[IN10](http://reference.wolfram.com/mathematica/tutorial/Conditionals.html) 的r [X_]:=开关[国防部[X,3],0,一,1,b,2,c]' 其中,运行时,将根据输入编号的mod返回值(a,b或c)。例如:Mo [7,3]返回2,因此r [10]的返回值将是b(如上定义的情况2的返回值)。 – jrd1

+0

我的意思是我想制作真正具有多种表述的功能。就像真实程序中的方法一样。例如函数doSomething(){result;操纵结果;更多地模仿结果;再次;返回结果; } – David