4

我一直在阅读有关符号语言如何工作的文章,更多地关注 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

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

4

1 回答 1

4

精确度仅取决于定义函数的顺序。

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
于 2013-06-19T19:57:48.647 回答