2009-09-29 17 views
5

के अंतिम तत्व हमें मैं एक सूची ((3 4 5) (d e f) (h i j) (5 5 5 5))हो जाओ प्रत्येक सूची

मैं इस तरह से कि उत्पादन इस (5 च जे 5) कैसा दिखेगा में प्रत्येक सूची के अंतिम तत्व कैसे प्राप्त कर सकते हैं मान लीजिए?

+4

होमवर्क की तरह दिखता है .. – nothrow

उत्तर

0

एक ऐसी प्रक्रिया लिखें जो सूची का अंतिम तत्व लौटाती है, फिर अंतर्निहित MAP (ए.के.ए. MAPCAR) प्रक्रिया के बारे में कुछ जानें और देखें कि कोई लाइटबुल बंद हो गया है या नहीं।

+1

सामान्य-लिस्प में, अंतर्निहित कार्य अंतिम और मैककन भी उपयोगी हो सकते हैं। –

9

मान लीजिए यह सामान्य लिस्प के बारे में है, एक कार्य last है जो एक सूची के अंतिम आइटम वाली एक सूची देता है। यदि आप mapcan के साथ इस फ़ंक्शन का उपयोग करते हैं, जो किसी सूची के प्रत्येक तत्व को दिए गए फ़ंक्शन को लागू करता है और समेकित परिणाम देता है, तो आप जो चाहते हैं उसे प्राप्त करेंगे।

ध्यान दें कि सूची के अंतिम तत्व तक पहुंचने के लिए O(N) ऑपरेशन है, इसलिए यदि यह केवल होमवर्क नहीं है, तो आप शायद यह विचार करना चाहें कि क्या आप अंतिम समस्या को अंतिम रूप से हल करने से अधिक कुशलता से हल नहीं कर सकते हैं प्रत्येक सूची का आइटम (शायद इसके बजाय एक और डेटास्ट्रक्चर का उपयोग करें)।

+0

उस उत्तर के लिए धन्यवाद लेकिन क्या आप मुझे इसके बारे में अधिक जानकारी दे सकते हैं। जैसे मैपकर का उपयोग कैसे किया जाता है। पूछने के लिए खेद है, लेकिन यह सिर्फ मेरी गड़बड़ी में उम्मीद है कि आप इस पर और अधिक मदद कर सकते हैं ... पहले से धन्यवाद .. बीटीडब्ल्यू, मैं सामान्य लिस्प का उपयोग कर रहा हूं और खेद है कि मैं जवाब के रूप में अपना जवाब पोस्ट करता हूं। –

+0

मैंने उल्लिखित कार्यों के लिए दस्तावेज़ों के लिंक जोड़े हैं। उनमें उदाहरण हैं। – sepp2k

+0

हाय! मैं एक काम करने के लिए सक्षम था कुछ कैसे रास्ता मैं want.This मेरी कोड (defun lastelements (एल) \t (यदि एल है \t \t (संलग्न (पिछले (प्रथम एल)) (lastelements (बाकी एल))) \t) ) लेकिन मुझे छोटी समस्या है .. जब मैं इनपुट करता हूं ((4) (हैलो (विश्व))) आउटपुट इस तरह कुछ है ((4) ((विश्व)) लेकिन उदाहरण से उत्पादन हमारे अभ्यास में देते हैं यह इस तरह दिखना चाहिए (4 (दुनिया)) .. अग्रिम धन्यवाद! –

3

यह, प्रारंभिक LISPY होमवर्क समस्याओं की तरह, प्रेरण के संदर्भ में पुनरावर्ती और/या सोचने में एक अभ्यास है। शुरू करने का तरीका अपने आप से सरल प्रश्न पूछना है कि आप आसानी से जवाब दे सकते हैं।

उदाहरण के लिए, आप कुछ है कि आप प्रत्येक सूची में पहले तत्व दिया लिखने के लिए कहा गया था अगर, मैं करूंगा इसके बारे में बात इस तरह से:

सूचियों की एक सूची को देखते हुए:

  1. क्या सूची '() सूची में प्रत्येक सूची का पहला तत्व है? (आसान - null)
  2. '(a) सूची में प्रत्येक सूची का पहला तत्व क्या है? (आसान - a, या शायद एक त्रुटि)
  3. '((a)) सूची में प्रत्येक सूची का पहला तत्व क्या है? (आसान - (a))
  4. फॉर्म '(anything) में किसी भी सूची का पहला तत्व क्या है, जहां कुछ भी एक सूची है? (आसान - (first anything))
  5. फॉर्म '(anything morestuff) में प्रत्येक सूची का पहला तत्व क्या है? (आसान - (cons (first anything) (first-element morestuff)))
  6. परमाणु का पहला क्या है? या तो परमाणु या त्रुटि (आपके दृष्टिकोण पर निर्भर करता है)
  7. शून्य का पहला क्या है? nil
  8. सूची में से पहला क्या है? (car list)

यहाँ से हम कोड लिखना शुरू कर सकते हैं:

;; here's first, meeting questions 6-8 
(define first (lambda (l) 
    (cond 
    ((null? l) nil) ; Q7 
    ((atom? l) l) ; Q6 
    (t (car l))))) ; Q8 

;; with first we can write first-element, meeting questions 1-5 
(define first-element (lambda (l) 
    (cond 
    ((null? l) nil) ; Q1 
    ((atom? l) (first l)) ; Q2 
    (t (cons (first (car l) (first-element (cdr l)))))))) ; Q4-5 

अब इस अपना होमवर्क (जानबूझकर) नहीं है। आपको इसके साथ खेलना चाहिए और समझना चाहिए कि यह कैसे काम करता है। आपका अगला लक्ष्य यह पता लगाना चाहिए कि यह आपके असाइनमेंट से अलग कैसे है और वहां कैसे पहुंचे।

मैपकर के संबंध में? इसके बारे में चिंता मत करो। आपको सीखना होगा कि पहले रिकर्सिव समस्याओं को कैसे हल किया जाए। फिर आप मैपकर के बारे में चिंता कर सकते हैं। इस असाइनमेंट का क्या मतलब है? इस मोड में सोचने में आपकी मदद करने के लिए।के पास डांग LISP/योजना में सब कुछ इस तरह सोचकर सुलझाया जाता है।

कारण मैं उन सभी हिस्सों में इसे तोड़ने के लिए सभी प्रश्नों के साथ गया जिसके बारे में मुझे चिंता है। अगर मुझे कार्य दिया गया है "मैं सूची में प्रत्येक आइटम पर कैसे फू करूं?" मुझे सवालों का जवाब देना चाहिए: मैं कैसे संभाल सकता हूं? एक परमाणु कैसे संभालते हैं? मैं सूची में पहले तत्व पर कैसे संभाल सकता हूं? मैं सबकुछ कैसे संभाल सकता हूं? एक बार मैंने इसका उत्तर देने के बाद, मुझे पता चला कि वास्तव में कैसे करना है। मैं शून्य पर फू कैसे करूं? मैं परमाणु पर फू कैसे करूं? मैं सूची में foo कैसे करूं?

0

शायद यह पहले से ही हल किया जाता है, लेकिन मैं समझ यह पता

; SELECT-FROM-INNER-LIST :: [list] -> [list] 
(DEFUN SFIL (lst) 
    (COND ((NULL lst) NIL) 
     ((LISTP (FIRST lst)) (APPEND (LAST (FIRST lst)) (SFIL (REST lst)))) 
)) 

अब, यह कानूनी सूची के लिए काम करता है ... इसलिए यदि आप सही सूची के साथ समारोह SFIL फोन .... नहीं तो, यह वापसी शून्य

उम्मीद है कि यह उपयोगी हो जाएगा, जो इसे तुतलाना की शुरुआत के रूप में

+0

कुछ टिप्पणियां: सबसे पहले, एक नियम के रूप में, [अलग-अलग लाइनों पर बंद होने वाले माता-पिता को न रखें] (http://dept-info.labri.u-bordeaux.fr/~idurand/enseignement/PFS/Common/Strandh- ट्यूटोरियल/indentation.html); फॉर्म पर इंडेंटेशन स्तर कोड की संरचना को देखने के लिए पर्याप्त है और आपके संपादक को किसी भी मामले में आपके लिए अभिभावक संतुलित होना चाहिए। दूसरा, कोड आमतौर पर निचले मामले में लिखा जाता है; दुभाषिया आप पर वापस चिल्लाता है, लेकिन आपको ऐसा करने की आवश्यकता नहीं है। अंत में, मुझे लगता है कि आपका प्रकार हस्ताक्षर 'चयन-से-इनर-लिस्ट :: [[ए]] -> [ए] 'होना चाहिए; वापसी मूल्य * जरूरी नहीं है * सूचियों की एक सूची होने जा रहा है। – Inaimathi

0
(defun get-last-lists (s) 
    (setq rt 'nil) 
    (loop for i from 0 to (- (length s) 1) 
     do (setq rt (append rt (last (nth i s))))) 
    (print rt)) 

पाता है किसी के लिए, मैं अपने समाधान पोस्ट।

+1

मैं आपके उत्तर का कुछ और विस्तार करूंगा। – ObieMD5

+0

मैं आपका सुधार, या अन्य देखना चाहता हूं। :) –

+0

मैं साइड इफेक्ट्स के बिना ऐसा करूँगा, और वास्तव में इसे प्रिंट करने के बजाय परिणाम वापस कर दूंगा। कुछ ('defun (सूची-सूची) सूचीबद्ध करता है (सूचीबद्ध सूची में सूची के लिए लूप (अंतिम एल))' – Inaimathi

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