2009-12-03 13 views
5

में एक भविष्यवाणी को परिभाषित करने के लिए कैसे करें मैं प्रोलॉग के लिए नया हूं और मैंने अब तक एक फ़ाइल में भविष्यवाणी को परिभाषित करने के लिए सीखा है और दुभाषिया को इसका उपयोग करने के लिए चलाया है। लेकिन मैं जानना चाहता हूं कि भविष्य में परिभाषित करने का कोई तरीका है? - प्रॉम्प्ट ताकि मुझे आगे और पीछे स्विच न करना पड़े।प्रोलॉग

तरह से मैं अब यह कर रहा हूँ इस

फ़ाइल defs.pl की तरह है: prolog दुभाषिया में

adjacent(1,2). 
adjacent(1,3). 

:

?- consult('defs.pl'). 
% defs.pl compiled 0.00 sec, 122 bytes 
true. 
?- adjacent(1,2). 
true. 

संपादित शायद मैं मतलब कैसे परिभाषित करने के लिए 'तथ्यों' मुझे यकीन नहीं है।

?- assert(adjacent(1,4)). 
true 

संपादित करें:

उत्तर

9

आप assert/1 विधेय का उपयोग कर सकते वैसे, इस अगर आप एक फाइल में परिभाषित विधेय के साथ संयोजित करने की कोशिश काम नहीं करेगा। तो या तो अपनी फ़ाइल में सभी आसन्न/2 भविष्यवाणियों को परिभाषित करें, उन्हें कमांड लाइन में जोर से परिभाषित कर रहे हैं।

तो आपको यह स्पष्ट साथ फ़ाइल में विधेय, और दूसरों से कुछ निर्धारित करना चाहते हैं, तो आपकी फ़ाइल है कि विधेय गतिशील है में घोषित:

% file contents 
:- dynamic(adjacent/2). 
adjacent(1,2). 
adjacent(1,3). 
4

आप क्या कर सकते हैं

?- consult(user). 

या

?- [user]. 

और दर्ज खंड उसके बाद, फिर फ़ाइल ch के अंत के साथ समाप्त इनपुट एक्टर (लिनक्स में Ctrl-D, एमएस-विंडोज़ में Ctrl-Z हो सकता है)। यह फ़ाइल पढ़ने के बराबर है, the documentation of consult/1 देखें।

assert/1 और retract/1 का अनुमान है कि कोड द्वारा गतिशील रूप से बदल दिया गया है (यानी वैश्विक डेटा संग्रहीत करने के लिए), सामान्य प्रोग्रामिंग के लिए नहीं।

+0

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

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