2015-05-25 7 views
5

से वापस ले लिया गया है मैंने अभी एसडब्ल्यूआई प्रोलॉग से एक कनेक्शन स्थापित किया है और तथ्यों में हेरफेर करना चाहता हूं। जैसे वापस ले लें और उनका दावा करें। ,प्रोलॉग सी # इंटरफेस फ़ाइल

 String[] param = { "-q" }; 
     PlEngine.Initialize(param); 
      PlQuery.PlCall("consult('tablets.pl')."); 

      PlQuery.PlCall("assert(tablet(4,newatomic))."); 
      PlQuery.PlCall("tell('tablets.pl'), listing(tablet/2), told."); 
      PlQuery.PlCall("retractall(tablet/2)."); 
      PlQuery.PlCall("assert(tablet(1,n1ewatomic))."); 
      PlQuery.PlCall("assert(tablet(2,n2ewatomic))."); 
      PlQuery.PlCall("tell('tablets.pl'), listing(tablet/2), told."); 

आप इस समारोह देख सकते हैं यह अभिकथन के लिए काम कर रहा है के रूप में उम्मीद है, लेकिन वापस लेना के लिए नहीं:

मैं इस तरह कुछ काम किया है। मामला यह है कि, मैं अगले टैबलेट डालने से पहले फ़ाइल से सभी टैबलेट तथ्यों को हटा देना चाहता हूं (वे गतिशील हैं)। PlQuery.PlCall("retractall(tablet/2)."); इस क्वेरी को फ़ाइल में मौजूद सभी रिकॉर्ड को हटाना होगा। और उदाहरण के लिए tablet(4,newatomic) उदाहरण के लिए एक तथ्य को कैसे हटाएं, लेकिन अन्य तथ्यों को हटाने के लिए नहीं।

निष्पादन के बाद परिणामी फ़ाइल है:

:- dynamic tablet/2. 

tablet(4, newatomic). 
tablet(1, n1ewatomic). 
tablet(2, n2ewatomic). 

उत्तर

0

ठीक है, करते हैं, एक सवाल को नष्ट नहीं करना चाहता कारण यह दो upvotes मिला है। शायद यह किसी के लिए उपयोगी होगा।

तो, तर्क सही था।

जब भी हम डेटाबेस के लिए कुछ अनुलग्न करना चाहते हैं हम लिख:

assert(predicat(var1, var2, ... , varn)) 

जब भी हम डेटाबेस से कुछ को नष्ट करना चाहते हम लिख:

retract(predicat(var1, var2, ... , varn)) 
retractall(predicat(var1, var2, ... , varn)) 

सभी शर्तों बराबर हैं यह डाटाबेस से हटा नहीं दिया जाता (यह भी गतिशील होना चाहिए)

यदि हम सभी डेटा हटाना चाहते हैं, तो हमें इसे वैरिएबल द्वारा निर्दिष्ट करने की आवश्यकता है। तो ...

retract(predicat(_,_,...,_)) 
retractall(predicat(_,_,...,_)) 

क्वेरी से मेल खाने वाले सभी डेटा को हटा देगा। और डेटा को सहेजने के लिए हम अभी लिखते हैं:

tell('database_file.txt'), %opening file for writing 
listing(ig_node), %writing 
told. %closing/saving file