2010-12-11 36 views
4

我想自动确定给定的对象是Combinatorica还是Mathematica 8.0 Graph。在Mathematica中分辨不同的“图形”对象8

它似乎并不认为FullForm有足够的信息来分辨出哪个是

(* output of Combinatorica`CompleteGraph[1] *) 
Graph[List[],List[List[List[0,0]]]] 

(* output of System`CompleteGraph[1] *) 
Graph[List[1],List[]] 

数学,但是,能够告诉他们分开,并呈现一个为文本字符串,另一个视觉对象。有

  1. 的方式来查看表达式中“隐藏”的信息并不在FullForm显示
  2. 方式来看待Mathematica使用渲染表达式的规则?

更新: 看来头给出了两个图不同的结果,即使显示的头是相同的。定义函数为f [a_System'Graph]和f [a_Combinatorica'Graph]导致正确的版本被称为

回答

3

头为两种类型的图表返回不同的值:

In[1]:= g1 = Combinatorica`CompleteGraph[1]; 

In[2]:= g2 = System`CompleteGraph[1]; 

In[3]:= Combinatorica`Graph === Head[#] & /@ {g1, g2} 

Out[3]= {True, False} 

In[4]:= System`Graph === Head[#] & /@ {g1, g2} 

Out[4]= {False, True} 

作为问题1 ,您在查看图形,图像等非符号对象中的“隐藏”信息方面的选项有限。您可以调用可以访问本机对象表示的内置Mathematica函数。有特定于对象类型的函数(如VertextCount或ImageDimensions)或更一般的(如CurrentValue或PropertyValue)。您可以使用MMA文档来查找这些功能的综合列表。或者,您可以通过检查包含此类对象的输出单元格的单元表达式来收集有用的信息。但是这可能会被打击或错过。

至于问题2,WRI通常会保护内置功能的渲染规则。此外,某些功能(如绘图工具和图形编辑器)似乎直接内置于笔记本接口本身。您可能会很幸运地检查渲染函数的上值或下值,例如MakeBoxes格式等等。再次,它有点被击中或未命中。

+0

Head [g] ===图可以表示根据$ ContextPath的System'Graph或Combinatorica'Graph。某些功能会自动将“Combinatorica”添加到上下文路径。一种解决方案是检查“Combinatorica”是否处于上下文路径中并将其删除,不知道它是多么健壮 – 2010-12-11 23:21:00

+0

好吧,它看起来像是一个显示问题,你是对的,即使它们可能在FullForm中显示相同 – 2010-12-11 23:40:27