2012-09-25 18 views
8

मैं एक प्रश्न में core.logic में टाइप की कोशिश की:का उपयोग कर गणित समीकरणों को हल करने के लिए कैसे core.logic

(run* [q] (== 0 (+ (* q q) (* 4 q) 4))) 

और शीघ्र कहते हैं,

error: lvar cannot be cast to a number 

घटना में नहीं है कि मैं पूरी तरह से गलत तर्क है कि तर्क तर्क प्रोग्रामिंग किस बारे में है, क्या इस तरीके को कोर.लॉगिक का उपयोग करके हल किया जा सकता है?

उत्तर

5

जहां तक ​​मैं core.logic पा सकता हूं, इस समीकरण को हल करने के लिए बीजगणित नहीं कर सकता। यह बुनियादी गणित कर सकते हैं कि हालांकि गणित के लिए आदानों क्योंकि गणित कार्यों इन पर काम नहीं कर सकता वास्तविक मान होने के लिए नहीं LVar की जरूरत है: जब एक्स एक स्पष्ट मूल्य नहीं है और जब एक्स नहीं है विफल रहता है

user> (run* [q] 
    (fresh [x] 
     (== x 1) 
     (project [x] (== q (+ (* x x) 4))))) 
(5) 

काम करता है :

user> (run* [q] 
    (fresh [x] 
     (== x q) 
     (project [x] (== q (+ (* x x) 4))))) 
ClassCastException clojure.core.logic.LVar cannot be cast to java.lang.Number 
5

आपको विचारों के लिए तर्कसंगत Schemer पढ़ना चाहिए। मूल रूप से एक तर्क कार्यक्रम में गणित करने का तरीका संख्याओं की सूची-आधारित एन्कोडिंग बनाना है, जो तर्क इंजन को चीजों को निकालने के लिए आवश्यकतानुसार बढ़ सकता है। मेरे पास पुस्तक आसान नहीं है, लेकिन यह बिट्स की सूची के रूप में पूर्णांक को एन्कोड करता है, कुछ अजीब तरीके से मैं काफी याद नहीं कर सकता: शायद (1) 0, (0) का प्रतिनिधित्व करता है अवैध है, और एमएसबी सूची में आखिरी है?

वैसे भी, यह बहुत काम है; डेविड नोलन ने हाल ही में कोर.लॉगिक में सीमित डोमेन के बारे में कुछ भी पेश किया है। मुझे नहीं पता कि वे कैसे काम करते हैं, लेकिन मुझे लगता है कि वे आपको यह बताते हुए समस्या को सरल बनाते हैं कि आपकी समस्या के समाधान के रूप में किस प्रकार की संख्याओं पर विचार करना है।

+0

मैं एक पृष्ठ मिला https://github.com/frenchy64/Logic-Starter/wiki/अंकगणित जो इसके माध्यम से जाता है – zcaudate

+0

मुझे लगता है कि अंकगणित वास्तव में कोर.लॉगिक एटीएम के लिए डोमेन नहीं है – zcaudate

2

core.logic इसके वर्तमान रूप में एक संख्यात्मक समीकरण सॉल्वर के रूप में डिज़ाइन नहीं किया गया है - यह तार्किक और संबंधपरक अभिव्यक्तियों को हल करने के लिए अधिक उपयुक्त है।

आप मूल रूप से गणितीय समीकरणों को हल करने के लिए दो व्यावहारिक मार्गों है:

  • विश्लेषणात्मक समाधानकर्ताओं - समाधान जैसे साधारण मामलों के लिए काफी आसानी से पाया जा सकता है आपके ऊपर की तरह वर्गवार समीकरण, लेकिन तेजी से जटिल रूप से जटिल होने लगते हैं और फिर कई समीकरणों के लिए असंभव/अक्षम हो जाते हैं। यह एक विशाल खुला अनुसंधान विषय है।
  • संख्यात्मक हलकों - ये तकनीकें अधिक सामान्य हैं और इन्हें किसी भी तरह के समीकरण पर उपयोग किया जा सकता है। हालांकि परिणाम सटीक नहीं कर रहे हैं और एल्गोरिदम सही समाधान (रों) यदि समीकरण "बुरा" विशेषताएं (discontinuities, अजीब ढ़ाल, स्थानीय न्यूनतम आदि के जटिल सेट)

समीकरण समाधानकर्ताओं की आवश्यकता होती है खोजने के लिए असफल हो सकता है गणितीय समीकरणों के "नियम" को समझने के लिए विशेष खुफिया, उदाहरण के लिए बहुपद अभिव्यक्तियों (विश्लेषणात्मक समाधानों के लिए) या व्युत्पन्न (संख्यात्मक समाधान के लिए) का आकलन कैसे करें।

कुछ लिंक है कि दिलचस्प हो सकता है: