修改内部函数

在 Wolfram 语言中可以对任何表达式定义变换规则. 不仅可以定义添加到 Wolfram 语言中去的函数,而且还可以对 Wolfram 语言的内部函数进行变换,于是就可以增强或修改内部函数的功能.

这一功能是强大的,同时也具有潜在的危险. Wolfram 语言永远遵循给出的规则,当规则不正确时,就会得出错误的结果.

为了避免在修改内部函数过程中的错误,Wolfram 语言限制对内部函数重新定义. 当要定义内部函数时,首先要去掉这种限制. 完成定义以后要恢复这一限制以免以后犯错误.

Unprotect[f]去掉保护限制
Protect[f]加上保护限制

函数的保护.

内部函数通常被保护,不能重新定义它们.
In[1]:=
Click for copyable input
Out[1]=
去掉 Log 的保护.
In[2]:=
Click for copyable input
Out[2]=
现在可以自行定义 Log 函数. 即使这个定义不正确,Wolfram 语言也允许你这样定义.
In[3]:=
Click for copyable input
Out[3]=
不论这个定义正确与否,Wolfram 语言将在所有可能的情况下使用用户的定义.
In[4]:=
Click for copyable input
Out[4]=
清除 Log 的不正确定义.
In[5]:=
Click for copyable input
恢复对 Log 的保护.
In[6]:=
Click for copyable input
Out[6]=

用户定义的函数高于 Wolfram 语言内部函数. 一般说来,Wolfram 语言总是先使用用户定义的函数.

Wolfram 语言的内部规则是希望能进行宽广的各种运算. 在有些不愿意用内部规则的情况下,可以用可以定义的规则来超越内部的规则.

简化 Exp[Log[expr]] 时有一个内部规则.
In[7]:=
Click for copyable input
Out[7]=
可以自行定义 Exp[Log[expr]] 来代替内部规则.
In[8]:=
Click for copyable input
现在使用了自己的定义,而不是内部规则.
In[9]:=
Click for copyable input
Out[9]=