Wolfram mathematica “区分不同的事物”;图;Mathematica 8中的对象

Wolfram mathematica “区分不同的事物”;图;Mathematica 8中的对象,wolfram-mathematica,Wolfram Mathematica,我想自动确定给定的对象是Combinatica还是Mathematica 8.0图形 FullForm似乎没有足够的信息来判断哪个是哪个 (* output of Combinatorica`CompleteGraph[1] *) Graph[List[],List[List[List[0,0]]]] (* output of System`CompleteGraph[1] *) Graph[List[1],List[]] 然而,Mathematica能够将它们区分开来,并将其中一个渲染为文

我想自动确定给定的对象是Combinatica还是Mathematica 8.0图形

FullForm似乎没有足够的信息来判断哪个是哪个

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

(* output of System`CompleteGraph[1] *)
Graph[List[1],List[]]
然而,Mathematica能够将它们区分开来,并将其中一个渲染为文本字符串,另一个渲染为可视对象。有吗

  • 查看未以完整形式显示的表达式中的“隐藏”信息的方法
  • 如何看待Mathematica用于呈现表达式的规则
  • 更新: 虽然显示的头部是相同的,但两个图形的头部给出的结果似乎不同。将函数定义为f[a_System'Graph]和f[a_combinatica'Graph]会导致调用正确的版本

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

    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通常保护内置功能的渲染规则。此外,一些功能(如绘图工具和图形编辑器)似乎直接内置到笔记本界面本身。您可能会幸运地检查渲染函数(如Makebox和Format等)上的向上值或向下值。同样,这是一个有点命中或未命中的结果。

    Head[g]==Graph可以表示System
    Graph,也可以表示Combinatica
    Graph,具体取决于$ContextPath。有些函数会自动将“Combinatica”添加到上下文路径中。一个解决方案是检查“Combinatica”是否在上下文路径中并将其删除,但不确定它的健壮性如何,这似乎是一个显示问题,您是对的,头部是不同的,尽管它们可能以完整形式显示相同