2012-10-14 16 views
8

मैं कैसे जांच सकता हूं कि प्रोलॉग प्रोग्राम में कोई पूर्वानुमान मौजूद है या नहीं? यही कारण है कि एक exists/1 होगा, जैसे:प्रोलॉग: यह जांचने के लिए कि कोई भविष्य मौजूद है या नहीं?

?- exists(some_predicate). 
false. 

?- assert(some_predicate). 
true. 

?- exists(some_predicate). 
true. 

उत्तर

11

आप current_predicate/1, current_predicate/2 या predicate_property/2 उपयोग कर सकते हैं (पिछले के लिए आप शायद functor/3 की आवश्यकता होगी):

?- current_predicate(a/1). 
false. 

?- functor(A,a,1),predicate_property(A,visible). 
false. 

?- functor(A,a,1),current_predicate(_,A). 
false. 

?- assert(a(42)). 
true. 

?- current_predicate(a/1). 
true. 

?- functor(A,a,1),predicate_property(A,visible). 
A = a(_G136). 

?- functor(A,a,1),current_predicate(_,A). 
A = a(_G122). 

current_predicate/2 और predicate_property/2 (दृश्य) के साथ यदि सफल होता है भविष्यवाणी को ऑटोलोडेड किया जा सकता है जबकि currrent_predicate/1

1

'पुराने फैशन तरीके' में विफल रहता है, लेकिन आईएसओ में स्वीकार किया जाता है, clause/2। कुछ पुराने उदाहरणों का पुन: उपयोग/ब्राउज़ करते समय आप इसका सामना कर सकते हैं।

उदाहरण:

?- [user]. 
|: app([], Y, Y). 
|: app([X|Xs], Y, [X|Zs]) :- app(Xs, Y, Zs). 
|: % user://1 compiled 0,15 sec, 17 clauses 
true. 

?- clause(app(X,Y,Z),Body). 
X = [], 
Y = Z, 
Body = true ; 
X = [_G338|_G339], 
Z = [_G338|_G342], 
Body = app(_G339, Y, _G342). 
+2

यह केवल सार्वजनिक संपत्ति के साथ विधेय के लिए आईएसओ में स्वीकार किया जाता है! डिफ़ॉल्ट रूप से यह स्थिर कोड के लिए काम नहीं करता है। – false

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

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