我对这个函数的行为感到非常困惑:
david[x_] := 5; 6; 7
david[]
返回
7
但david[3]
返回5
为什么会这样?我认为第二种情况也应该返回 7;为什么不呢?
我对这个函数的行为感到非常困惑:
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 语言的怪癖之一。