需要帮助避免条件或模式测试中的列表

Sun*_*day 3 wolfram-mathematica pattern-matching typechecking

我们如何使用条件或模式测试使我们的函数接受任何符号作为输入除了列表?

Mic*_*lat 8

用途Except:

f[x : Except[_List]] := doSomethingTo[x]

expr /. x : Except[_List] :> doSomethingElseTo[x]
Run Code Online (Sandbox Code Playgroud)

您可以将其与Alternatives(中缀运算符|)组合以排除多个内容:

g[x : Except[_List | _Rational]] := etc[x]
Run Code Online (Sandbox Code Playgroud)

编辑:合并评论中的答案:

ListQ[expr]将返回True如果expr是列表(有头List)和False否则.MatchQ[expr, _List]并且Head[expr]===List是完成相同事情的等效方法.

  • @Sunday:小心一点,例如`Length [f [x]]`也是`1`. (3认同)
  • 并且,例如`长度[3]`是'0`,所以我看不出你在第一时间所做的完成了=) (2认同)