मैं core.logic के साथ प्रयोग कर रहा हूँ, और तर्क भाव में भाग लेने के अपने खुद के कस्टम डेटा प्रकार सक्षम करना चाहते हैं:विस्तार core.logic
(deftype Expression [node vars]
....)
मूल रूप से यह एक गणितीय अभिव्यक्ति पेड़ में एक नोड का प्रतिनिधित्व करता है, एक नोड पेड़ और उपयोग किए गए अनबाउंड वैरिएबल का एक सेट युक्त। node
या तो स्थिर, प्रतीक या (Operator Expression Expression....)
पेड़ नोड है। मैं गणितीय अभिव्यक्तियों में हेरफेर करने के लिए core.logic का उपयोग करने में सक्षम होना चाहता हूं, और इस तरह के अभिव्यक्तियों के उप-मिलान के खिलाफ मैच करना चाहता हूं।
यदि संभव हो तो मैं यह कैसे कर सकता हूं?
मैं core.logic स्रोत कोड से देखते देखते हैं कि एक number of protocols है कि वे की तरह लग रहे विस्तार करने के लिए अच्छा होगा (जैसे IUnifyTerms
, IReifyTerms
आदि), लेकिन यह पूरी तरह से स्पष्ट है कि इन सभी में इस्तेमाल किया जा के लिए होती हैं नहीं है, और जो मुझे वास्तव में विस्तार करने की जरूरत है।
आपको टर्म रेवाइट सिस्टम में रुचि हो सकती है। मैंने पाया है कि आप जो प्रयास कर रहे हैं उसके मौजूदा कार्यान्वयन को देखते हुए फलदायी रहे हैं (माउड, स्ट्रेटगो/एक्सटी अच्छा है)। साथ ही, ध्यान रखें कि आप सहयोगी-सहकारी मिलान समस्या में भाग ले सकते हैं; एक कम्प्यूटेशनल रूप से चुनौतीपूर्ण सबप्रोबलेम जो मौजूदा कोर.लोगिक मशीनरी विशेष रूप से अच्छी तरह से समर्थन नहीं करेगा (आखिरी बार मैंने वैसे भी जांच की थी।) – MRocklin