mathematica如何处理含糊不清的定义?

时间:2013-06-19 15:41:44

标签: wolfram-mathematica symbolic-math

我一直在阅读有关符号语言如何运作的内容,更多地关注Mathematica。据我所知,评估是将一系列转换规则应用于输入,直到找不到更多匹配的转换规则并将其结果称为“输出”。

然后问题出现了:当多个转换规则与给定表达式匹配时该怎么办?我尝试了第一个例子:

A[x_, 3] := 0;
A[x_, y_] := 1;

A[a, b]
=> 1

A[k, 3]
=> 0

我相信我可以通过说3匹配3“比”y“更好”来解释这一点。然后是我的第二个实验:

B[x_, 3] := 0;
B[4, y_] := 1;

B[4, 3]
=> 0

这是为什么?我希望看到某种错误。

1 个答案:

答案 0 :(得分:4)

precidnece只是按照函数的定义顺序。

ClearAll[B]
B[x_, 3] := 0;
B[4, y_] := 1;
B[4, 3]
  (* 0 *)
ClearAll[B]
B[4, y_] := 1;
B[x_, 3] := 0;
B[4, 3]
  (* 1 *)

注意,如果重新定义函数,事情会变得混乱。

ClearAll[B]
B[x_, 3] := 0;
B[4, y_] := 1;
B[4, y_] := 2;
B[x_, 3] := 3;
B[4, 3]

 (* 3 *)

请注意,定义已正确更改,但顺序依据原始顺序进行。 (因此在使用这些东西的同时自由使用ClearAll)

查看订单使用情况:

??B
相关问题