2011-06-06 10 views
7

मान लीजिए मैं एक तथ्य से भर DB में कम से कम:कैसे डेटाबेस में सभी prolog नियमों को खोजने के लिए

fact1(A) :- !, A=ok. 
fact2(B) :- !, B=ok. 

मैं इस DB में सभी तथ्यों के माध्यम से कैसे की गणना कर सकते हैं? आदर्श रूप में मैं एक विधेय है कि मैं इस्तेमाल कर सकते हैं होगा:

?- all_rules(Head :- Tail). 
Head=fact1(_G100), 
Tail=(!, _G100=ok) ; 
Head=fact2(_G101), 
Tail=(!, _G101=ok) 
....followed by all other predicates in other modules loaded... 

मैं current_predicate/1 पाया, लेकिन मैं समझ नहीं क्या यह वास्तव में क्या कर रहा है ...

उत्तर

7

यह आपके द्वारा उपयोग किए जा रहे सटीक प्रोलॉग सिस्टम पर निर्भर करता है। जब तक आप केवल परिभाषाओं को देखना चाहते हैं, listing/0 कई प्रणालियों में काम करता है। लेकिन listing/0 केवल एक पाठ प्रिंट करता है। clause/2 अक्सर गतिशील रूप से घोषित भविष्यवाणियों के लिए काम करता है।

6

हो सकता है कि कुछ इस तरह:

?- current_predicate(Name/Arity), 
    functor(Pred, Name, Arity), 
    nth_clause(Pred, Index, Ref), 
    clause(Head, Body, Ref). 

Examining the program में और पढ़ें।

+1

'मज़ेदार (पूर्वानुमान, नाम, धर्मार्थ)' – false

+1

क्लॉज/2 पर विचार करें जो मैं ढूंढ रहा हूं! इस उदाहरण में, मुझे विश्वास है कि इसे क्लॉज (हेड, बॉडी) के साथ कॉल करना मुझे हेड = तथ्य (ए), बॉडी = (!, ए = ओके) – DaveEdelstein

+1

@ फाल्स धन्यवाद, तय करेगा। – Kaarel

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