2011-12-25 10 views
7

अब मैंने जांच की है कि एक्स (वाई) मेरे छोटे डीबी में एक स्वीकार्य तथ्य नहीं है। चूंकि एक्स (वाई) झूठा रिटर्न देता है, इसलिए यह जोर देने का प्रयास करेगा।क्या मैं जोर/1 के साथ चर का उपयोग कर सकता हूं?

ifNotAdd(X,Y):- 
    not(call(X,Y)), 
    !, 
    assert(X(Y)). 

उदाहरण के लिए (मैं इस समस्याओं को प्रस्तुत करता है जब एक्स एक नियम और नहीं एक तथ्य है एहसास), मान लें कि इस तथ्य डीबी

mammal(dolphin). 

में है मैं ifNotAdd (स्तनपायी, हाथी पूछना चलो)।

मैं इसे देखना चाहता हूं? स्तनपायी (हाथी)। झूठ है और फिर स्तनधारियों (हाथी) पर जोर देते हैं।

स्पष्ट रूप से "जोर (एक्स (वाई))।" लाइन गलत है लेकिन मैं इसे किसके साथ बदलूं? मैं जवाब के लिए प्रोलॉग प्रलेखन और मंचों का सामना कर रहा हूं लेकिन अब तक कोई भाग्य नहीं है। मैं कुछ लिखने की भी कोशिश कर रहा हूं जो इसे स्वयं ही करेगा।

EDIT मुझे गतिशील डेटाबेस रखने के लिए डीबी को संपादित करने की आवश्यकता है ताकि उपयोगकर्ता बातचीत कर सके। मैं एक तर्क मशीन बना रहा हूं और मुझे उपयोगकर्ता को सिस्टम को यह बताने की अनुमति देने की आवश्यकता है कि वे "निश्चित रूप से तथ्य को जानते हैं" ताकि सिस्टम इसके डोमेन के बाहर ज्ञान से निपट सके।

http://en.wikipedia.org/wiki/Reason_maintenance

चीयर्स के सिलसिले में,

उत्तर

8

आप univ operator=../2 यह जताने से पहले अवधि के निर्माण के लिए उपयोग कर सकते हैं (ध्यान दें प्रश्न में विधेय यह काम करने के लिए गतिशील घोषित किया जाना है कि):

ifNotAdd(X,Y):- 
    not(call(X,Y)), 
    !, 
    Term =.. [X, Y], 
    assert(Term). 

BTW अगर आप ifNotAdd/2 चाहते विफल नहीं जब यह डाटाबेस के लिए इस तथ्य को जोड़ने की जरूरत नहीं है, तो आप उस लपेट चाहिए एक में अगर संरचना, के साथ साथ, not/1 हटाई गई है, (\+)/1 पसंद किया जाता है:

:- dynamic(mammal/1). 

mammal(dolphin). 

ifNotAdd(X, Y):- 
    ( \+ call(X, Y) 
    -> Term =.. [X, Y], 
     assert(Term) 
    ; true). 

लेकिन मुझे यकीन है कि आप क्या करने की कोशिश कर रहे हैं वहीं है नहीं कर रहा हूँ। अक्सर जब प्रोलॉग में एक शुरुआत डेटाबेस में हेरफेर करना चाहता है, ऐसा इसलिए है क्योंकि एक विशेष प्रोलॉग तंत्र ठीक से समझ में नहीं आता है। फिर फिर आप एक नौसिखिया नहीं हो सकते हैं और मेरी टिप्पणी गूंगा हो सकती है, इस मामले में, बस इसे भूल जाओ! लेकिन यदि आप एक नौसिखिया हैं, तो आप यहां जो हासिल करने की कोशिश कर रहे हैं उसे सटीक बनाना चाहते हैं ताकि हम पुष्टि कर सकें कि उन कुशलताओं की आवश्यकता है!

+0

आह हा, मैं आमतौर पर पठनीयता के लिए() को उपयोग नहीं करता हूं, जब इसे पहली बार एक साथ हैकिंग किया जाता है, भले ही इसे बहिष्कृत किया गया हो। पोस्ट के लिए इसे बदलना चाहिए था। वैसे भी वही है जो मैं खोज रहा हूं। मैंने प्रोलॉग का उपयोग नहीं किया है क्योंकि मैंने इसे कक्षा में कुछ समय पहले सीखा था और रिलीज कर रहा हूं। पूरी तरह से भूल गए '= ../2' ताकि वह हल हो जाए। मैं ऊपर कार्यक्रम को स्पष्ट कर दूंगा। आपके संपादन के बारे में –

+0

: डीबी में हेरफेर करने का एक कानूनी कारण लगता है:] – m09

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

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