2013-03-24 8 views
5

मैं core.logic के साथ प्रयोग कर रहा हूँ, और तर्क भाव में भाग लेने के अपने खुद के कस्टम डेटा प्रकार सक्षम करना चाहते हैं:विस्तार core.logic

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

मूल रूप से यह एक गणितीय अभिव्यक्ति पेड़ में एक नोड का प्रतिनिधित्व करता है, एक नोड पेड़ और उपयोग किए गए अनबाउंड वैरिएबल का एक सेट युक्त। node या तो स्थिर, प्रतीक या (Operator Expression Expression....) पेड़ नोड है। मैं गणितीय अभिव्यक्तियों में हेरफेर करने के लिए core.logic का उपयोग करने में सक्षम होना चाहता हूं, और इस तरह के अभिव्यक्तियों के उप-मिलान के खिलाफ मैच करना चाहता हूं।

यदि संभव हो तो मैं यह कैसे कर सकता हूं?

मैं core.logic स्रोत कोड से देखते देखते हैं कि एक number of protocols है कि वे की तरह लग रहे विस्तार करने के लिए अच्छा होगा (जैसे IUnifyTerms, IReifyTerms आदि), लेकिन यह पूरी तरह से स्पष्ट है कि इन सभी में इस्तेमाल किया जा के लिए होती हैं नहीं है, और जो मुझे वास्तव में विस्तार करने की जरूरत है।

+1

आपको टर्म रेवाइट सिस्टम में रुचि हो सकती है। मैंने पाया है कि आप जो प्रयास कर रहे हैं उसके मौजूदा कार्यान्वयन को देखते हुए फलदायी रहे हैं (माउड, स्ट्रेटगो/एक्सटी अच्छा है)। साथ ही, ध्यान रखें कि आप सहयोगी-सहकारी मिलान समस्या में भाग ले सकते हैं; एक कम्प्यूटेशनल रूप से चुनौतीपूर्ण सबप्रोबलेम जो मौजूदा कोर.लोगिक मशीनरी विशेष रूप से अच्छी तरह से समर्थन नहीं करेगा (आखिरी बार मैंने वैसे भी जांच की थी।) – MRocklin

उत्तर

1

core.logic को कस्टम प्रकारों के लिए एक्स्टेंसिबल करने के लिए डिज़ाइन किया गया है। हालांकि यह अच्छी तरह से प्रलेखित नहीं है क्योंकि प्रोटोकॉल बदल सकते हैं क्योंकि हम सीखते हैं कि वास्तव में क्या आवश्यक है। Core.logic को कस्टम प्रकारों में विस्तारित करने के लिए आवश्यक चीज़ों को समझने के लिए clojure.core.logic.nominal नेमस्पेस की जांच करना उचित है।

संबंधित मुद्दे