2011-07-26 26 views
12

我明白,Mathematica中的一千个内置重写规则默认填充全局规则表。有没有办法让Mathematica提供这些规则的全部或部分列表?如何获得Mathematica内置的全局重写规则列表?

+0

您的意思是像选项一样吗?要查看笔记本的所有选项,您可以执行“选项[笔记本]”,它将为您提供笔记本电脑的所有选项。你可以用任何对象来做到这一点。这是你重写规则的意思吗? – jmlopez

回答

11

最好的方法是在Wolfram Research找工作。

如果失败了,我认为对于没有完全编译到内核中的东西,您可以恢复大部分规则/定义。看看

Attributes[fn] 

其中fn是你感兴趣的命令。如果返回

{Protected, ReadProtected} 

然后有什么东西你可以看看(虽然往往只是一个MakeBoxes(格式化)定义或AutoLoad /存根类型定义)。要看看有什么有运行

Unprotect[fn]; 
ClearAttributes[fn, ReadProtected]; 
??fn 

很多时候你必须运行该命令的例子来加载它,如果它是一个存根。您还必须从面向用户的命令到后端实现中进行挖掘。 最终,您很可能会到达一个编译到内核中的核心命令,您无法看到其详细信息。

我之前在tips for creating Graph diagrams中提到过这个,它在What is in your Mathematica tool bag?中有提及。

一个很好的例子,有一个很好的一口大小和可消化的代码位0123.0中提到的Experimental`AngularSlider[]。我会留给你看看生成的代码。

另一个例子是BoxWhiskerChart,你需要调用它来加载所有的代码。然后,您看到BoxWhiskerChart继续拨打Charting`iBoxWhiskerChart,您必须取消保护以查看等等。

+2

我应该提到,Mathematica所熟知的大部分真正有趣的规则(代表专有信息的东西),例如集成和求和规则,都是不可访问的。 – Simon

+1

以这种方式获取某些内置函数的源代码是可能的,但输出的代码通常是不可读的混乱(主要是由于前置上下文和缺少缩进)。你通常使用什么来使其更具可读性? – Szabolcs

+1

@Szabolcs:将上下文添加到“$ ContextPath”中有助于解决第一个问题。然后将代码复制到一个新的输入单元有助于第二个问题。 – Simon