2010-08-12 11 views
12

आम LISP और Emacs LISP परमाणु प्रकार का अनुमान है। योजना और क्लोजर में यह नहीं है। http://hyperpolyglot.wikidot.com/lispयोजना और क्लोजर में परमाणु प्रकार का अनुमान नहीं है - क्या यह डिज़ाइन द्वारा है?

क्या इसके लिए कोई डिज़ाइन कारण है - या क्या यह एपीआई में शामिल करने के लिए एक आवश्यक कार्य नहीं है?

+0

सामान्य जिज्ञासा के अलावा, वहाँ एक कारण है कि आप इसके लिए एक प्रयोग पाते हैं है? एक वस्तु या तो एक परमाणु या एक यौगिक वस्तु है, और आप आमतौर पर किस तरह की यौगिक वस्तु में रुचि रखते हैं, है ना? –

+0

कुछ योजनाएं परमाणु जैसी विभिन्न छोटी चीजों के साथ आती हैं? आपकी सुविधा के लिए पूर्वनिर्धारित। उदाहरण के लिए, [छोटा] चेज़ योजना सबसे तुच्छ कार्यों के साथ आता है जो आप मौजूद होने की उम्मीद करेंगे। – erjiang

उत्तर

14

क्लोजर में, परमाणु भविष्यवाणी इतना महत्वपूर्ण नहीं है क्योंकि क्लोजर विपक्षी कोशिकाओं/सूचियों पर ध्यान केंद्रित करने के बजाय विभिन्न प्रकार के (अपरिवर्तनीय) data structures पर जोर देती है।

इससे भ्रम पैदा हो सकता है। उदाहरण के लिए हैशपैप, सेट या वेक्टर दिए जाने पर आप इस कार्य को कैसे व्यवहार करेंगे? या एक जावा ऑब्जेक्ट जो कुछ जटिल परिवर्तनीय डेटा संरचना का प्रतिनिधित्व करता है?

इसके अलावा "परमाणु" नाम का उपयोग पूरी तरह से अलग के लिए किया जाता है - यह क्लोजर के कोर समवर्ती तंत्र to manage shared, synchronous, independent state में से एक है।

6

आर 6 आरएस को लागू करने वाले पूरे आयरनशेम मानक पुस्तकालयों में, मुझे इस तरह के एक समारोह की आवश्यकता नहीं थी।

सारांश में:

  • यह बेकार
  • है यह अगर आप इसे

जो काफी कुछ योजना के minimalistic दृष्टिकोण निम्नानुसार जरूरत है बहुत आसान लिखने के लिए है।

12

क्लोजर में coll? (संग्रह?) फ़ंक्शन है, जो atom? के विपरीत (क्रमबद्ध) है।

(defun atom (x) 
    (not (consp x))) 

यह सूची प्रसंस्करण में प्रयोग किया जाता है जब लिस्प बोली conses का उपयोग करता सूची बनाने में:

1

यह एक तुच्छ सुविधा नहीं होती। कुछ 'लिस्पस' हैं जिनके लिए यह मामला नहीं है या केंद्र नहीं है।

2

ऐसी योजना में जो pairatom नहीं है। योजना पहले से ही विधेय pair? को परिभाषित करता है के रूप में, atom? विधेय, की जरूरत नहीं है के रूप में यह परिभाषित करने के लिए इतना तुच्छ है:

(define (atom? x) 
    (and (not (pair? x)) 
     (not (null? x)))) 

कि ध्यान देने योग्य बात:

(define (atom? s) 
    (not (pair? s))) 
+0

योजना एक जोड़ी और एक सूची के बीच अंतर नहीं जानता है? या क्या यह जोड़ी की अवधारणा बदल गया है? लिस्प में एक जोड़ी, केवल परमाणु, विपक्ष, और सूचियों जैसी कोई चीज़ नहीं है। जब तक मुझे पता है कि एक जोड़ी में दो चीजें हैं। तो आप कह सकते हैं कि दो तत्वों की एक सूची एक जोड़ी है, लेकिन तीन या अधिक की सूची नहीं है। लेकिन एक जोड़ी के रूप में दो तत्वों की एक सूची लेना अवधारणात्मक रूप से अच्छा नहीं है। एक दूसरे से बताना बेहतर है। – Alfgaar

+0

@ अल्फागर: यह बिल्कुल सही नहीं है। एक सूची एक पुनरावर्ती डेटा संरचना है: प्रत्येक सूची या तो खाली सूची है, या एक जोड़ी जहां दूसरा तत्व, सीडीआर, स्वयं ही एक सूची है। 100 वस्तुओं की एक सूची अभी भी एक जोड़ी है, जिसमें जोड़े की श्रृंखला शामिल है। –

6

पुस्तक The Little Schemer में, atom? इस प्रकार परिभाषित किया गया है null परमाणु नहीं माना जाता है, क्योंकि अन्य उत्तरों ने सुझाव दिया है। उल्लिखित पुस्तक में atom? का उपयोग भारी रूप से किया जाता है, खासकर जब सूचियों की सूचियों से निपटने वाली प्रक्रियाओं को लिखना।

+1

बहुत बढ़िया! उस पुस्तक को प्यार किया। – hawkeye

+0

योजना वास्तव में एक अजीब भाषा है, यह शून्य की जगह शून्य है, और शून्य एक परमाणु नहीं है। योजना जावास्क्रिप्ट के अलावा lisp की सबसे अजीब बोली होना चाहिए। – Alfgaar

+0

मुझे लगता है कि आपको इस परिभाषा में '(नहीं (प्रक्रिया? X)' जोड़ना होगा, जब तक कि आप कोई प्रक्रिया नहीं लेते, परमाणु है। – Alfgaar

0

एटम या तो प्रतीक, एक चरित्र, संख्या, या शून्य है।

(define (atom? a) 
    (or (symbol? a) 
     (char? a) 
     (number? a) 
     (null? a))) 

मैं उन सभी परमाणुओं कि मौजूद हैं, अगर आप अधिक conditional expression में जोड़ने के लिए लगता है कर रहे हैं लगता है। उदाहरण के लिए, यदि आपको लगता है कि स्ट्रिंग एक परमाणु है, तो जोड़ें (स्ट्रिंग? ए), :-)। परमाणु के लिए परिभाषा की अनुपस्थिति, आपको इसे जिस तरह से चाहते हैं उसे परिभाषित करने की अनुमति देती है। आखिरकार, योजना नहीं जानता कि परमाणु क्या है।

लिस्प में nil एक परमाणु है, इसलिए मैंने null परमाणु बनाया है। nil सरलीकरणद्वारा सरलीकरण की एक सूची भी है, वैसे ही अभिन्न संख्या सरलीकरण द्वारा तर्कसंगत संख्याएं हैं, 2 = 2/1, 2 एक अभिन्न संख्या है, 2/1 एक तर्कसंगत संख्या है, क्योंकि दोनों तर्कसंगत एक के सरलीकरण के बराबर हैं; एक कहते हैं कि अभिन्न संख्या 2 भी एक तर्कसंगत संख्या है। लेकिन सूची की भविष्यवाणी योजना में पहले ही परिभाषित है, चिंता करने की कोई बात नहीं है।

प्रश्न के बारे में। जब तक मेरा संबंध है, योजना केवल वर्ग प्रकारों के लिए भविष्यवाणी की गई है, परमाणु एक वर्ग प्रकार नहीं है, परमाणु एक अमूर्त है जिसमें कई वर्ग प्रकार शामिल होते हैं। शायद यही कारण है। लेकिन जोड़ी कक्षा वर्ग नहीं है, लेकिन इसमें कई वर्ग प्रकार शामिल नहीं हैं, और फिर भी कुछ जोड़े को क्लास प्रकार के रूप में मान सकते हैं।

एटम का मतलब है कि एक निश्चित चीज एक परिसर चीज नहीं है। ऐसी भविष्यवाणी शामिल करने का एक कारण यह नहीं है कि जब भाषा आपको परमाणु प्रकारों को परिभाषित करने की अनुमति देती है, तो परमाणुओं का पेट्रोरा व्यापक और व्यापक हो सकता है, और इस तरह की भविष्यवाणी का कोई मतलब नहीं होगा। मुझे नहीं पता कि योजना इसके लिए अनुमति देती है या नहीं। मैं केवल इतना कह सकता हूं कि योजना भविष्यवाणी करती है (अंतर्निर्मित) सभी विशिष्ट हैं। आप पूछ सकते हैं, क्या यह एक सेब है?, क्या यह एक नारंगी है?; लेकिन आप नहीं पूछ सकते हैं यह एक फल है?। :-)। अच्छा, आप कर सकते हैं, अगर आप इसे स्वयं करते हैं। क्या कहा गया है इसके बावजूद, योजना का सामान्य अनुमान number? है, और संख्या विशिष्ट भविष्यवाणी, integer?, rational?, real?; इसके बावजूद, संख्या को कक्षा के प्रकार के रूप में माना जा सकता है (अन्य भविष्यवाणियां उप-प्रकार के संख्या का संदर्भ देती हैं), जबकि परमाणु (कम से कम योजना में) नहीं है।

नोट: वर्ग प्रकार: प्रकार है कि चीजों में से एक निश्चित वर्ग के हैं। उदाहरण:

संख्या, पूर्णांक, असली, तर्कसंगत, चरित्र, प्रक्रिया, सूची, वेक्टर, स्ट्रिंग, आदि

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