2013-05-04 7 views
18

में एक साथ नहीं कर रहे हैं मैं कोड के इस टुकड़े है:Prolog: क्लाज स्रोत-फ़ाइल

Warning: Clauses of female/1 are not together in source-file 
Warning: Clauses of male/1 are not together in source-file 

इस त्रुटि का उद्देश्य क्या है:

% Family tree 
female(pen). 
male(tom). 
male(bob). 
female(liz). 
female(pat). 
female(ann). 
male(jim). 

parent(pam, bob). 
parent(tom, bob). 
parent(tom, liz). 
parent(bob, ann). 
parent(bob, pat). 
parent(pat, jim). 

मैं इस त्रुटि मिलती है?
मेरा मतलब है, फ़ाइल संकलित और ठीक ठीक चलती है और मुझे त्रुटि के अर्थ से अवगत है। पर क्यों?
क्या यह सिर्फ सर्वोत्तम अभ्यास को लागू करने के लिए एक नोटिस है?

मैं तर्क प्रोग्रामिंग के लिए बहुत नया हूं।
धन्यवाद!

+0

उन लोगों के लिए जो इसे ठीक करने के बारे में नहीं जानते हैं: संबंधों के नाम से संबंधों (इस मामले में 'नर' और 'मादा') समूह बनाएं। –

उत्तर

12

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

+0

इसे बंद करने का कोई तरीका है? कभी-कभी मैं इस तरह कोड लिख नहीं सकता। – intelis

+1

@intelis Prolog को यह बताने का एक तरीका है कि आप क्लॉज को फैलाने का इरादा रखते हैं ([उत्तर देने के लिए यह बताएं कि यह कैसे करें] (http://stackoverflow.com/q/2482101/335858))। – dasblinkenlight

+0

धन्यवाद, लेकिन यह सिर्फ खंड नहीं है। मुझे सिंगलटन चर आदि जैसे विभिन्न चेतावनियों का गुच्छा मिलता है। – intelis

5

चेतावनी सर्वोत्तम अभ्यास को प्रोत्साहित करती है और स्पॉट टाइपोस में मदद करती है। यहाँ एक टाइपो उदाहरण है:

small(ant). 
small(fly). 
small(molecule). 

smell(sweet). 
smell(pungent). 
small(floral). 

गलती को पहचानना कठिन है, लेकिन सौभाग्य से संकलक चेतावनी देते हैं:

Warning: /tmp/test.pl:7: 
Clauses of small/1 are not together in the source-file 

चेतावनी है और एक लाइन त्रुटि के साथ, एक खोजने के लिए और अधिक तेजी से टाइपो सही कर सकते हैं।

आईएसओ प्रोलॉग विशिष्ट भविष्यवाणियों के लिए इस चेतावनी को चुप करने के लिए discontiguous/1 निर्देश प्रदान करता है। Spec के खंड 7.4.2.3 देखें। इसका उपयोग इस प्रकार किया जाता है:

:- discontiguous small/1.