2012-10-31 14 views
7

में सूची के अंत में जोड़ने के लिए कैसे मैं प्रोलॉग में एक सूची के अंत में एक आइटम जोड़ने की कोशिश कर रहा हूं, लेकिन यह असफल रहा है।प्रोलॉग

insertAtEnd(X,[ ],[X]). 
insertAtEnd(X,[H|T],[H|Z]) :- insertAtEnd(X,T,Z).  

letters([a,b,c]). 

मुझे समझ में नहीं आता कि यह क्यों काम नहीं करता है।

insertAtEnd(d,letters(Stored),letters(Stored)). 

मैं भी चर भर संग्रहित में इस सूची संग्रहीत करने का प्रयास कर रहा हूँ, लेकिन मुझे यकीन है कि अगर ऊपर आगे बढ़ने के लिए सही तरीका है नहीं कर रहा हूँ।

+0

सूची के अंत में एक तत्व डालने की आवश्यकता दृढ़ता से सुझाव देती है कि आप * अंतर सूची * देखें, जो आपको ओ (1) सम्मिलन देगा। –

उत्तर

3

प्रोलॉग संबंध गणना मॉडल लागू करता है, और चर केवल तत्काल ही निर्दिष्ट नहीं किया जा सकता है। प्रयास करें

?- letters(Stored), 
    insertAtEnd(d, Stored, Updated), 
    write(Updated). 
+0

तो मूल सूची संपादन योग्य नहीं है? आइए कहें कि मुझे एक और अक्षर प्राप्त होता है, मुझे insertAtEnd (ई, अपडेटेड, अपडेटेडएजैन) कॉल करने की आवश्यकता होगी? मैं कंसोल के बिना सूची को अद्यतन करने के लिए एक अनुमान का उपयोग करने की कोशिश कर रहा हूं। – MeowMeow

+1

हां, यह गणना करने का असामान्य तरीका है। यह घोषणात्मक प्रोग्रामिंग से कड़ाई से संबंधित है। प्रोलॉग लागू नियमों को बाध्यकारी चर ढूंढते हैं, जब इसे विकल्पों को खोजने की आवश्यकता होती है जो पहले स्थापित बाइंडिंग को पूर्ववत करना शुरू कर देते हैं। – CapelliC

1

आप append का उपयोग करें और दूसरी सूची के रूप में अपने आइटम रख सकते हैं

इस तरह:

insertAtEnd (एक्स, वाई, जेड): - संलग्न (वाई, [X], जेड)।

+0

हालांकि यह समस्या को हल करने के लिए एक महत्वपूर्ण संकेत हो सकता है, उत्तर वास्तव में इसके मुकाबले थोड़ी अधिक जानकारी की आवश्यकता है। कृपया [संपादित करें] यह समझाने के लिए कि यह समस्या को कैसे हल करेगा। वैकल्पिक रूप से, इसे इसके बजाय टिप्पणी के रूप में लिखने पर विचार करें। –

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