मैं इस मुद्दे पर एसडब्ल्यूआई-प्रोलॉग में सूचियों के साथ फंस गया हूं। प्रोलॉग में एक चर एक बार लिखा जा सकता है, इसलिए मैं इस समस्या से निपट नहीं सकता।

check(Parameter, [H | T], Result) :- 
   get_res(Parameter, H, Res), 
   check(Res, T, Result).

तो, विधेय चेक/3 एक पैरामीटर, एक सूची लेता है और मुझे अंतिम परिणाम देता है। get_res/3 मुझे एक मध्य परिणाम देता है जिसका उपयोग मैं चेक/3 के पुनरावर्ती मामले के लिए इनपुट के रूप में करता हूं। तो परिणाम में मेरे पास प्रत्येक रिकर्सिव कॉल के लिए Res होना चाहिए। मैंने पुनरावर्ती कॉल से पहले एपेंड ([पैरामीटर], [], परिणाम) का उपयोग करने की कोशिश की लेकिन पहली बार सफल हुआ, फिर यह विफल हो गया क्योंकि परिणाम को फिर से लिखा नहीं जा सकता। मुझे पता है कि मुझे बेस केस की भी आवश्यकता है, यह चेक (_, [], []) हो सकता है। लेकिन मुझे उस पर भी यकीन नहीं है

0
Aonna 18 फरवरी 2019, 01:33

1 उत्तर

सबसे बढ़िया उत्तर

अपने परिणामों को पुनरावर्ती रूप से आउटपुट में जोड़ने के लिए, आप कोड को इस प्रकार संशोधित कर सकते हैं:

check(_,[],[]).
check(Parameter, [H | T], [Res|Result]) :- 
   get_res(Parameter, H, Res), 
   check(Res, T, Result).

इस स्थिति में सही ढंग से कार्य करने के लिए बेस केस भी महत्वपूर्ण है। जब आप चेक/3 को कॉल कर रहे हों, तो सुनिश्चित करें कि Result के लिए तर्क एक चर s.t है। यह सही ढंग से काम कर सकता है।

0
Koralp Catalsakal 17 फरवरी 2019, 23:25