आम लिस्प कंस सेल की परिभाषा वास्तव में क्या है? एक मानक सेल सूची मानक सूची आइटम से अलग कैसे है? आखिरकार, विपक्षी सेल और लिंक्ड सूची आइटम दोनों के पास अगले सेल या आइटम के लिए एक मूल्य और सूचक होता है ... या क्या यह समझ गलत है?लिस्प कंस सेल की परिभाषा क्या है?
उत्तर
आम तौर पर विपक्षी कोशिकाओं में दो पॉइंटर्स होते हैं जो कुछ भी इंगित कर सकते हैं। पाठ्यक्रम का सामान्य उपयोग बाएं एक के साथ "मूल्य", और "दाएं" के साथ एक अन्य विपक्ष सेल (या शून्य) को इंगित करना है।
विपक्षी कोशिकाएं पॉइंटर्स धारण किए बिना सीधे मूल्यों को पकड़ सकती हैं। (विपक्ष 1 2) से बने एसी कंस सेल में संख्याओं के लिए पॉइंटर्स होंगे, लेकिन उन्हें सीधे स्टोर कर सकते हैं (कुछ अन्य छोटी वस्तुओं जैसे वर्णों के लिए)। –
में संख्याओं के पॉइंटर्स नहीं होंगे, मेरा मतलब है –
एक विपक्षी सूची नोड से एक बाइनरी पेड़ नोड के करीब है। कार और सीडीआर दो बच्चों को वापस कर देते हैं, जो शून्य, परमाणु या अन्य विपक्षी कोशिकाएं हो सकती हैं।
यहां भेद पर जोर देने के लिए, कोई आवश्यकता नहीं है कि दूसरा तत्व एक और विपक्ष सेल होना चाहिए। '('tofu। 1)' एक मान्य विपक्ष सेल है। – Chuck
लिस्प में, एक विपक्ष सेल में मूल्यों की एक जोड़ी होती है। यदि विपक्ष सेल c
परिवर्तनीय में है, तो (car c)
पहला मान देता है और (cdr c)
दूसरा देता है।
सम्मेलन के अनुसार, एक सूची में विपक्षी कोशिकाएं होती हैं जहां सेल के car
में नोड मान होता है और cdr
में सूची के अंत को इंगित करने के लिए अगले नोड या शून्य (खाली सूची) का संदर्भ होता है। जब आदिम कार्य सूचियों को वापस या स्वीकार करते हैं, यह वह प्रारूप है जिसमें सूची प्रस्तुत की जाती है।
इसलिए, सूची l
के लिए, (car l)
पहला तत्व (पहले विपक्ष सेल में मूल्य) और (cdr l)
रिटर्न सूची की पूंछ (सूची में अगले विपक्ष सेल) देता है।
मुझे लगता है कि यहां अन्य उत्तरों, सटीक होने पर, एक चीज़ के बारे में स्पष्ट नहीं हैं।
एक पारंपरिक सी ++ लिंक्ड सूची कार्यान्वयन में, दो क्षेत्रों (val
और next
, कहते हैं) टाइप किया हैं। next
को सूची में किसी अन्य नोड को इंगित करने के रूप में परिभाषित किया गया है, null
टर्मिनेटर होने के साथ। आप पर कुछ भी इंगित नहीं कर सकते हैं लेकिनnext
के साथ एक और नोड।
लिप्स गतिशील रूप से टाइप किए गए हैं, इसलिए या तो एक विपक्ष सेल में क्षेत्र कुछ भी (या तो परमाणु या संदर्भ) हो सकता है। आप विपक्षी कोशिकाओं के साथ एक लिंक्ड सूची को कार्यान्वित कर सकते हैं (यह सब एक लिस्प सूची है: nil
टर्मिनेटर के साथ विपक्षी कोशिकाओं की एक श्रृंखला), लेकिन आप प्रत्येक क्षेत्र में मनमाना मूल्य भी डाल सकते हैं, एक कॉन्स सेल का उपयोग समन्वय जोड़ी के रूप में करते हैं, एक पेड़ नोड, आदि
आप इन्हें भी जोड़ सकते हैं; उदाहरण के लिए, x
y
की एक सूची निर्देशांक:
;; (cons foo (cons bar nil)) == (list foo bar)
(cons
(cons 5 4)
(cons (cons 9 10) nil))
=>
((5 . 4) (9 . 10))
एक विपक्ष सेल इस प्रकार सख्ती से एक लिंक्ड सूची नोड से अधिक सामान्य है, यह बोलने के लिए "लागू जोड़ी" के करीब है। मानक सूची प्रसंस्करण कार्य (map
, dolist
, आदि) के सभी बस में कार्य करता है कि मान आप car
में मूल्यों डाल रहे हैं और cdr
में एक और सूची है।
इस सब का मतलब है कि - अगर आप की कामना की - आप सूचियों पीछे की ओरcar
अगले विपक्ष सेल की ओर इशारा करते और cdr
मूल्य की ओर इशारा करते के साथ निर्धारित कर सकते हैं,! एक लिंक किए गए सूची नोड के साथ ऐसा करने के लिए आपको प्रकारों को बदलने के लिए कक्षा या डेटा संरचना को फिर से परिभाषित करना होगा।
एक cons
सेल, cons
, car
से मिलकर एक अनुबंध का एक तिहाई, और cdr
है आवश्यकता जा रहा है कि वे, जोड़े के रूप में व्यवहार के रूप में दूसरों का उल्लेख किया है के साथ।
इस परिभाषा से "संदर्भ", "सूचक" इत्यादि को छोड़ने का कारण यह पहचानना है कि वे कार्यान्वयन विवरण हैं। आप के लिए, आप एक cons
हवा से बाहर का निर्माण कर सकते Abelson के रूप में, चाहता था और Sussman किया है:
(define (cons a b) (lambda (x) (x a b)))
(define (car x) (x (lambda (a b) a)))
(define (cdr x) (x (lambda (a b) b)))
इस परिभाषा परिभाषाएँ और कार्यों का लिस्प की दुनिया के अंदर पूरी तरह से रहता है, और यहां तक कि ध्यान में रखना आवश्यक नहीं रुकती वस्तुओं को मान या संदर्भ के रूप में संग्रहीत किया जाता है; फिर भी ये आदिम वस्तुओं के लिए ड्रॉप-इन प्रतिस्थापन के रूप में कार्य कर सकते हैं (उत्परिवर्तन या अन्य विशेष उपयोगों पर विचार नहीं कर रहे हैं)।
- 1. "लिस्प फॉर्म" की परिभाषा?
- 2. सेवा ऑब्जेक्ट की परिभाषा क्या है?
- 3. कार्यान्वयन विस्तार की परिभाषा क्या है?
- 4. लुकहेड सेट की सटीक परिभाषा क्या है?
- 5. सामान्य लिस्प की भविष्यवाणी
- 6. लिस्प -1 और लिस्प -2 के बीच क्या अंतर है?
- 7. कोक सबूत में एक रणनीति की परिभाषा की परिभाषा
- 8. "सिंक्रनाइज़ेशन आदिम" की परिभाषा
- 9. अपरिवर्तनीयता की वास्तविक परिभाषा?
- 10. स्कैला वर्ग परिभाषा की शुरुआत में => क्या मतलब है?
- 11. क्या इस Struct प्रकार की परिभाषा के साथ गलत है
- 12. क्या Google App Script Syntax की पूरी परिभाषा कहीं है?
- 13. संगत अनुवर्तीताओं की इस परिभाषा का क्या अर्थ है?
- 14. पेड़ की ऊंचाई के लिए परिभाषा क्या है?
- 15. क्या यह कॉलबैक की आपकी परिभाषा में फिट है?
- 16. रणनीति डिजाइन पैटर्न की सटीक परिभाषा क्या है?
- 17. एंड्रॉइड डिवाइस के लिए सोने की परिभाषा क्या है?
- 18. नियमित भाषाओं की परिभाषा
- 19. स्पेगेटी PHP की परिभाषा?
- 20. 'क्लीन कोड' की परिभाषा
- 21. `struct ap_conf_vector_t` की परिभाषा कहां है?
- 22. बाहरी चार ** पर्यावरण की परिभाषा कहां है?
- 23. लिस्प/योजना में '(एस्ट्रोफ़े) क्या है?
- 24. सबसे प्रभावशाली लिस्प एप्लिकेशन क्या है?
- 25. लिस्प
- 26. पार्सिंग में लिस्प बेहतर क्या है?
- 27. लिस्प
- 28. लिस्प
- 29. लिस्प
- 30. 'marshalling' शब्द की सटीक परिभाषा
प्रत्येक सूची ('शून्य 'को छोड़कर) एक विपक्षी कोशिका है, लेकिन प्रत्येक विपक्षी सेल एक सूची नहीं है (यदि इसकी' सीडीआरआर सूची नहीं है) – mihi
मैं सिर्फ यह स्पष्ट करना चाहता था कि मैं ऊपर एक सामान्य लिस्प के बीच तुलना कर रहा हूं सूची और इसके विपक्षी कोशिकाएं और एक नियमित लिस्केड सूची और उसके आइटम जैसे सी, सी ++ या जावा जैसी भाषा में कार्यान्वित किए गए हैं। –