2012-07-18 13 views
16

मैं प्रोलॉग में सूचियों को कैसे जोड़ूं? मैं इंटरनेट में खोज की है और मैं (http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/2_7.html से) यह पायामैं प्रोलॉग में सूचियों को कैसे जोड़ूं?

append([X|Y],Z,[X|W]) :- append(Y,Z,W). 
append([],X,X). 

तो यह [X|W] में [X|Y] के तत्वों को हटाने के द्वारा Z हो जाता है। लेकिन मैं एक साथ दो सूचियों को कैसे जोड़ूं?

उदाहरण के लिए,

appendlist([1,2],[3,4,5],X). 

परिणाम X = [1,2,3,4,5] हो जाएगा।

मुझे यह भी नहीं पता कि रिकर्सन में क्या हो रहा है। (मैं इसे पता लगाया लेकिन समझ में नहीं आया)

संपादित करें: क्या मैं जानना चाहता हूँ कि यह कैसे() पूर्वनिर्धारित संलग्न की तरह कार्य करने prolog में

उत्तर

20

कोड जैसा आपने पोस्ट किया है (लगभग) ठीक है। खंड के आदेश सिर्फ बदली जा करने के लिए (यह विधेय परिभाषा उत्पादक, जब एक उत्पादक तरीके से उपयोग में बनाने के लिए क्रम में) की जरूरत है:

append([],X,X).       % your 2nd line 
append([X|Y],Z,[X|W]) :- append(Y,Z,W). % your first line 

यह तीन तर्कों के बीच एक संबंध को परिभाषित करता है, मान लें कि A, B और C जाने ।

में आप सबसे पहले कहते हैं, "CA और B अगर A और C हैं गैर खाली सूचियों जोड़कर का परिणाम है, वे दोनों एक ही सिर (यानी पहला तत्व), और पूंछ की राशि C एक ही दूसरे तर्क, B "" के साथ A की पूंछ को जोड़ने का नतीजा है।

a  a 
    ---------- 
    b  b 
    c  c 
    . d d 
     e e 
     . . 

इसके बारे में सोचें, यह सही समझ में आता है। यह क्या है, हम append/3 रिश्ते को परिभाषित करना चाहते हैं, और हम जानते हैं कि हम क्या चाहते हैं, इसलिए हम इसके बारे में कुछ स्पष्ट तथ्यों को लिखते हैं कि हम इसे पूरा करना चाहते हैं, यदि आप करेंगे तो कानूनों का पालन करना चाहिए।

तो मान लीजिए कि हमारे पास यह कोड पहले से ही हमारे लिए परिभाषित है, इसका क्या पालन करना चाहिए?जाहिर है, किसी अन्य सूची के साथ कुछ सूची की पूंछ जोड़ना हमें उस दूसरी सूची के साथ पूरी सूची को जोड़ने के परिणाम की पूंछ देता है।

यह परिभाषित करता है कि हम पहली सूची के साथ "स्लाइड" कैसे करते हैं। लेकिन अगर स्लाइड करने के लिए कहीं और नहीं है तो क्या होगा? क्या होगा यदि हम उस सूची के अंत तक पहुंच गए हैं? फिर हम खाली सूची में पहुंचे हैं, और एक और सूची के साथ एक खाली सूची जोड़ना परिणाम के रूप में हमें सूची देता है। जाहिर है। और यह है कि आपके कोड में दूसरी पंक्ति हमें बता रही है, यह कहती है, "खाली सूची को एक और सूची के साथ जोड़ने से परिणाम" "के रूप में सूचीबद्ध होता है।

आश्चर्यजनक रूप से, इन दो कानूनों को लिखा है जो append/3 का पालन करना चाहिए, परिभाषा को स्वयं लिखने जैसा ही है।

अतिरिक्त: यह इसे एक घोषणात्मक दृष्टिकोण से समझाता है; an answer by m09 देखें जो इसे परिचालन बिंदु से अधिक दिखाता है।

9

कोडित किया जाना चाहिए लेकिन यह कैसे करना है मैं एक साथ दो सूचियों को जोड़ता हूं?

आप अपनी खुद की सवाल का जवाब: आप append/3 का उपयोग करें।

आप Z में X और Y संलग्न करें और परिणाम संग्रहीत करना चाहते हैं, तो आप

append(X, Y, Z) 

हैं, उदाहरण के X = [1, 2] और Y = [3, 4, 5] तो Z[1, 2, 3, 4, 5] करने के लिए बाध्य किया जाएगा के लिए कार्य करें:

| ?- append([1,2],[3,4,5], X). 

X = [1,2,3,4,5] 

yes 
| ?- 
+1

ओह मेरा मतलब यह है कि, मैं इसे कैसे कोड करूं जो प्रोलॉग – Zik

+5

के एपेंड() की तरह काम करेगा, आप इसे उसी तरह कोड करते हैं जिसे 'एपेंड' कोड किया गया है ?? आप पहले से ही कार्यान्वयन की खोज कर चुके हैं (यह आपके प्रश्न में कोड की पहली दो पंक्तियां है)। – aioobe

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