2012-10-10 10 views
5

उदाहरण:प्रोलॉग सूची। जाँच करें कि सूची में पहले और अंतिम तत्व समान

firstlast([1,2,3,4,1]). 
true; 

firstlast([1,2,3,4]). 
false; 

firstlast([5,10,4,3]). 
false; 

exc... 

समस्या im है केवल विधेय "firstlast" के साथ प्रत्यावर्तन का उपयोग करने की अनुमति दी। ? मैंने वास्तव में इसे तोड़ने की कोशिश की है, लेकिन मैं पहले के साथ अंतिम तत्व की जांच/तुलना नहीं कर सकता।

कोई संकेत?

उत्तर

3

अद्यतन: आप अन्य विधेय का उपयोग करने की अनुमति नहीं है के बाद से, इस प्रयास करें: आधार केस के साथ

firstlast([H,H]). 
firstlast([F,_|T]) :- firstlast([F|T]). 

पहले विधेय सौदों, दूसरा एक तीन या की एक सूची में दूसरा तत्व को हटा अधिक आइटम, और recurses।

+0

'एक्सएस = [एफ, एक्सएस], फर्स्टलास्ट (एक्सएस)। 'सफल होता है। क्या इसका इरादा है? – false

+0

@ फाल्स मैंने बस एसडब्ल्यूआई में यह कोशिश की, और मुझे वापस 'झूठी' मिली, क्या मुझे कुछ याद आ रहा है? (ध्यान दें: मैंने अपना जवाब संपादित किया, पहली पंक्ति में एक टाइपो था - यह 'आखिरी (एक्स, सूची)' के बजाय 'अंतिम (एक्स, सूची)' – dasblinkenlight

+0

'पहला (एच, एच)।' होना चाहिए हटा दिया। – false

2

आप शायद मतलब है कि पहला और अंतिम तत्व समान है।

 
firstlast(Xs) :- 
    phrase(([X],...,[X]), Xs). 

... --> [] | [_], ... . 

मैं या नहीं यकीन नहीं है कि firstlast([1]) सफल होने चाहिए नहीं कर रहा हूँ ...

0

खैर जब से तुम एकमात्र समाधान की तरह दिखाई देगा firstlast/1 के साथ एक प्रत्यावर्तन उपयोग कर सकते हैं: यहाँ एक समाधान का उपयोग कर -notation है :

firstlast(...) :- ... . 
firstlast(...) :- ... . 
firstlast(...) :- ... . 
.... 
firstlast(...) :- ... . 

उनमें से कुछ बेस केस के संबंध में नियम होंगे और उनमें से कुछ नियम "दूर खाने" के नियम होंगे। इस समस्या को एक चेक की आवश्यकता है: पहले और अंतिम तत्व की तुलना करें। इसलिए, आपके मूल मामले में आपके पास केवल इन 2 तत्व होना चाहिए; आपको कुछ और चाहिए नहीं। तो समाधान सभी अन्य तत्व

पर ध्यान नहीं देगा

पिछले संकेत: आप निम्नलिखित एकीकरण पैटर्न के साथ एक सूची के 2 पहले तत्वों का उपयोग कर सकते हैं:

foo([H1,H2|T]) 
0

तो निष्पक्ष मैं यह मिल गया:

firstlast([H,_|T]) :- 
(T1 = H, T1 = T) -> firstlast([H|T]). 

मेरा कोड अंतिम और प्रथम तत्व की तुलना करता है लेकिन रिकर्सन गलत है:/

जैसा ऊपर बताया गया है, उसे सूची में एक तत्व के साथ उत्तराधिकारी की अनुमति नहीं दी जानी चाहिए। हालांकि आईएम को केवल "फर्स्टलास्ट" भविष्यवाणी करने की अनुमति है।

+2

यदि आप इसे उत्तर में पोस्ट करने के बजाय इसे प्रश्न में जोड़ते हैं तो यह कोड कहीं अधिक दिखाई देगा। आप 'संपादित करें' लिंक पर क्लिक करके हमेशा अपना प्रश्न संपादित कर सकते हैं। – dasblinkenlight

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