तो मैंने अभी प्रोलॉग की कोशिश की और यहां, मैं अपना खुद का कॉन्टेनेट फ़ंक्शन बनाने का प्रयास करना चाहता था, जो दो सूचियों को जोड़ता है (पहली सूची पहले एक्स तत्वों के साथ, फिर वाई तत्वों के साथ दूसरी सूची)। मैं पुनरावर्ती का उपयोग करके यह कोशिश कर रहा हूं, लेकिन जब मैंने कुछ प्रश्न करने की कोशिश की, तो यह एक नहीं देता है। यहाँ मेरा कोड है।

/* These two functions are already correct, I checked it and it cannot be changed anymore */

push(Element,[], Result) :- Result = [Element], !.
push(Element,Queue,Result) :- [Head|Tail] = Queue, push(Element, Tail, Tail2), Result = [Head|Tail2].

pop(Queue,Result) :- [_|Tail] = Queue, Result = Tail.

/* concatenate */
concatenate(_,_,0,0,Result) :- Result = [], !.
concatenate(FList,SList,0,Y,Result) :- pop(SList,B), push(B,Result,Result), [_|Tail] = SList, Z is Y-1, concatenate(FList,Tail,0,Z,Result).
concatenate(FList,SList,X,Y,Result) :- pop(FList,A), push(A,Result,Result), [_|Tail] = FList, Z1 is X-1, concatenate(Tail,SList,Z1,Y,Result).

/* Query */
| ?- concatenate([1,2,3],[2,3,4],1,2,R).
no

मुझे लगता है कि यहां धक्का देने वाला हिस्सा वह है जो गलत परिणाम देता है, लेकिन हो सकता है कि अन्य हिस्से भी हों। क्या कोई इस मामले को हल करने में मेरी मदद कर सकता है या मार्गदर्शन कर सकता है?

1
Errata 6 नवम्बर 2020, 19:43
"एपेंड ([ए, बी], [1,2], एल)" में क्या गलत है। जो एल = [ए, बी, 1,2] देता है? यह पहली सूची को पहले तब तक जोड़ता है जब तक कि यह खाली न हो फिर दूसरी सूची।
 – 
peter.cyc
6 नवम्बर 2020, 20:00
हाय पीटर। मैं केवल फ़ंक्शन के पीछे तर्क का अभ्यास करने के लिए प्रोलॉग में पूर्व-परिभाषित कार्यों का उपयोग नहीं करने का प्रयास कर रहा हूं।
 – 
Errata
6 नवम्बर 2020, 20:06
साथ ही, मैंने इस प्रश्न में कुछ हिस्सों को संपादित किया जो अस्पष्ट प्रतीत हो सकता है। आशा है कि अब यह स्पष्ट हो गया है।
 – 
Errata
6 नवम्बर 2020, 20:11
1
तर्क 3 और 4 क्या कर रहे हैं?
 – 
peter.cyc
6 नवम्बर 2020, 20:16
1
यदि आप अभ्यास करना चाहते हैं, तो यह तरीका नहीं है। आप अपनी पुरानी आदतों को एक नए/अलग प्रतिमान में प्रयोग कर रहे हैं। प्रोलॉग शुरू करने का यह एक बुरा तरीका है।
 – 
peter.cyc
6 नवम्बर 2020, 20:18

1 उत्तर

सबसे बढ़िया उत्तर
pop(Queue,Result) :- [_|Tail] = Queue, Result = Tail.

push(Element,[], Result) :- Result = [Element], !.
push(Element,Queue,Result) :- [Head|Tail] = Queue, push(Element, Tail, Tail2), Result = [Head|Tail2].

concatenate(_,_,0,0,Result) :- Result = [], !.

concatenate(FList,SList,0,Y,Result) :- [Head|Tail] = SList, Z is Y-1, concatenate(FList,Tail,0,Z,Result2), Result = [Head|Result2], !.
concatenate(FList,SList,X,Y,Result) :-  [Head|Tail] = FList, Z1 is X-1, concatenate(Tail,SList,Z1,Y,Result2), Result = [Head|Result2].```
1
Errata 14 मार्च 2021, 18:36