2010-12-11 58 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