2013-03-24 112 views
5

我與core.logic試驗,並希望實現自己的自定義數據類型來參加邏輯表達式:擴展core.logic到自定義類型

(deftype Expression [node vars] 
    ....) 

基本上,這代表了一個數學表達式樹中的節點,包含一個節點樹和一組使用的未綁定變量。 node是一個常數,一個符號或一個(Operator Expression Expression....)樹節點。我希望能夠使用core.logic來操作數學表達式,並匹配這些表達式的子樹。

如果可能,我該如何做到這一點?

我從core.logic源代碼,看到有一個number of protocols,看上去就像他們將是很好的延伸(例如IUnifyTermsIReifyTerms等),但它並不完全清楚如何將這些都意味着要使用,哪些我真的需要延長。

+1

您可能會感興趣Term Rewrite Systems。我發現,看看你正在嘗試的現有實現已經成果豐碩(Maude,Stratego/XT很好)。另外,請注意您可能遇到關聯交換匹配問題;一個計算上具有挑戰性的子問題,現有的core.logic機器不會特別好支持(我上次無論如何檢查)。 – MRocklin 2013-03-24 03:36:43

回答

1

core.logic被設計爲可擴展到自定義類型。然而,這並沒有很好的記錄,因爲隨着我們瞭解到底需要什麼,協議可能會發生變化。值得研究clojure.core.logic.nominal命名空間以瞭解將core.logic擴展到自定義類型所需的內容。