在 Mathematica/Wolfram 语言中,有什么方法可以检查表达式是否已求值?

In Mathematica/Wolfram language, is there any way to check that an expression evaluated?

如果我有一个函数:

Foo[x_] := If[x==2, Print@"Two", Print@"No"]

那如果我这样写:

Foo[oops]; Foo[5]

其中 oops 是全局变量的拼写错误的名称,结果是对 Foo[oops] 的调用只是失败而不是给出错误。我知道这是为什么 - 因为它创建了一个符号表达式,因为它没有被评估,所以不做任何事情 - 但它对于过程编程来说非常尴尬。有什么方法可以指定函数或表达式必须完全求值并给出错误或 return 一个适当的值(如果不是)?

如果你想要求一个数字参数做这样的事情:

foo[x_?NumericQ] := whatever
foo[x_] := Print["Error"]

在这样定义之前,请务必Clear您的原始定义。

在您的示例中,您可以交替使用 If

的三参数形式