2016-12-04 11 views
5

सबसे पहले जब मैं प्रोलॉग पर विभिन्न भविष्यवाणियों पर पढ़ता हूं, उदाहरण के लिए http_server, यह इस तरह लिखा गया है: http_server(:Goal, +Options): और + का अर्थ क्या है? कभी-कभी ? भी लिखा जाता है।
दूसरी बार कभी-कभी मुझे _Request जैसे अंडरस्कोर के साथ घोषित चर दिखाई देता है, भले ही कोई अन्य Request नहीं है, वह क्यों है?प्रोलॉग में इसका क्या अर्थ है?

उत्तर

7

+, -, : आदि sigils कहा जाता है मोड घोषणाओं। वे अनुमानित तर्कों की अपेक्षित तत्कालता का वर्णन करते हैं, यानी, क्या आपको भविष्यवाणी को एक अनबाउंड वैरिएबल, तत्काल शब्द, आदि के साथ कॉल करने की उम्मीद है। ये पूरी तरह से मानकीकृत नहीं हैं; यहाँ SWI-Prolog के लिए सम्मेलनों का वर्णन है: http://www.swi-prolog.org/pldoc/man?section=modes

एक पहली सन्निकटन के रूप में, एक + तर्क एक इनपुट विधेय के लिए है, तो आप एक जमीन अवधि प्रदान करने वाले हैं। एक - तर्क भविष्यवाणी के आउटपुट है, भविष्यवाणी इसे एक शब्द के साथ एकीकृत करने का प्रयास करेगी। कॉल पर ? शब्द आंशिक रूप से तत्काल हो सकता है, और भविष्यवाणी इसे और तुरंत चालू कर सकती है। : तर्क मेटा-तर्क है, यानी, यह भविष्यवाणी के रूप में जाना जाने वाला एक लक्ष्य है (उदाहरण के लिए setof/3 में)।

http_server(:Goal, +Options) के उदाहरण में, आपको इस भविष्यवाणी को एक लक्ष्य के लिए पहले तर्क के साथ कॉल करना होगा, शायद एक अनुमानित नाम। दूसरा तर्क तत्काल होना चाहिए, संभावित रूप से उस सूची में जिसका प्रारूप दस्तावेज में आगे वर्णित है। यदि आप इस तरह की भविष्यवाणी को कॉल करते हैं, उदाहरण के लिए, यदि आप दूसरे तर्क के रूप में एक अनबाउंड वैरिएबल पास करते हैं, तो आपको अप्रत्याशित व्यवहार या तत्काल त्रुटि मिल सकती है।

आपके दूसरे प्रश्न के लिए (जो बेहतर होगा), एक चर जो अंडरस्कोर से शुरू होता है उसे अज्ञात चर कहा जाता है। प्रत्येक ऐसा चर केवल _ को छोड़कर, प्रत्येक खंड में एक बार हो सकता है, जो कई बार हो सकता है और प्रत्येक घटना पर अलग-अलग चर को संदर्भित करता है।

प्रोलॉग सिस्टम आमतौर पर गैर-अज्ञात चर के लिए एक "सिंगलटन वेरिएबल" चेतावनी उत्सर्जित करते हैं जो केवल एक बार होता है, क्योंकि वे टाइपो हो सकते हैं या प्रोग्रामर कुछ संकेत भूल सकता है। आप धारणा व्यक्त करने के लिए अज्ञात चर का उपयोग करते हैं कि "यहां कुछ होना चाहिए (उदा।, एक अनुमानित तर्क), लेकिन मुझे परवाह नहीं है कि यह क्या है"। आपके उदाहरण में, संभवतः आप एक भविष्यवाणी करते हैं जिसमें "अनुरोध" तर्क होता है, लेकिन आपके विशेष उपयोग मामले में आपको अनुरोध की परवाह नहीं है।

+0

धन्यवाद, बहुत अच्छा स्पष्टीकरण। फिर भी एक बात है जिसे मैं समझ नहीं पा रहा हूं, इसे '_Request' क्यों कहते हैं और न केवल '_'? क्या यह सिर्फ स्पष्टता के लिए है कि यह एक अनुरोध है? – Ferus

+1

हां, यह वैरिएबल नाम को अधिक अभिव्यक्तिपूर्ण बनाने के लिए है। –

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