1

我对这个函数的行为感到非常困惑:

david[x_] := 5; 6; 7

david[] 

返回

7

david[3]返回5

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

4

1 回答 1

2

令人惊讶的是,该功能并没有出现异常。事实上,它的行为是正确的。定义函数 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 语言的怪癖之一。

于 2012-10-09T03:42:56.840 回答