2013-08-08 10 views
6

में टाइप विनिर्देशों को समझना मुझे लिस्पॉर्क्स हाइपर स्पेक में टाइपिंग जांच का एक बड़ा उदाहरण मिला है, लेकिन "टाइप विनिर्देशक" लिंक केवल शब्दावली को संकेत नहीं देता है, और मुझे वाक्यविन्यास के साथ थोड़ा उलझन मिला है।सामान्य लिस्प

(check-type n (integer 0 *) "a positive integer")(integer 0 *) का अर्थ क्या है? मुझे लगता है कि इसका मतलब 0 से अनंत तक समावेशी सीमा है, लेकिन क्या ऐसा है?

+0

इसका मतलब है कि किसी भी पूर्णांक बराबर या अधिक तो शून्य (पहला है:

(vector double-float *) 

निम्नलिखित तत्व प्रकार अनिर्दिष्ट छोड़ देता है:

(vector double-float 100) 

निम्नलिखित लंबाई अनिर्दिष्ट छोड़ देता है निचला बाउंड दूसरा उच्च बाध्य है)। –

उत्तर

4

हाँ आप सामान्य लिस्प में टाइप विनिर्देशों का उपयोग कर सकते हैं, यदि आपका कंपाइलर उनका उपयोग करना चुनता है तो वे बहुत शक्तिशाली हो सकते हैं। जबकि आप चेक-टाइप के लिए उपयोग पा सकते हैं, सबसे सामान्य प्रकार के प्रकार विनिर्देश declarations के रूप में आते हैं।

declare अभिव्यक्ति न केवल प्रकारों के लिए उपयोग की जाती है, हालांकि इसमें declaration identifiers हैं और आम लिस्प कार्यान्वयन वास्तव में स्वयं को जोड़ने के लिए स्वतंत्र हैं।

यदि आप रुचि रखते हैं तो थोड़ा सा 'types' और 'Type Specifiers' से अधिक विशेष रूप से है। वह पृष्ठ आपको आपके प्रश्न में उल्लिखित तरीके सहित, प्रकार निर्दिष्ट करने के विभिन्न तरीकों पर कम-डाउन देगा।

फिर से जागरूक रहें कि आपके कार्यान्वयन को उन घोषणाओं का उपयोग नहीं करना है जो उन्हें अनदेखा कर सकते हैं! Here is some more info on that.

और कुछ उदाहरण कोड के लिए, यह उदाहरण है जिसने मुझे यह काम करने की मूल बातें समझने में मदद की। Here और अधिक here

4.2.3 Type Specifiers से:

एक प्रकार निर्दिष्टकर्ता एक सूची है, तो सूची के कार एक प्रतीक है, और सूची के बाकी सहायक प्रकार की जानकारी है। इस तरह के एक प्रकार विनिर्देशक को यौगिक प्रकार विनिर्देशक कहा जाता है। स्पष्ट रूप से के अलावा अन्यथा कहा गया है, सहायक वस्तुओं को निर्दिष्ट नहीं किया जा सकता है। अनिर्दिष्ट सहायक वस्तुओं को * लिखने से संकेत मिलता है। उदाहरण के लिए, वेक्टर की पूरी तरह से निर्दिष्ट करने के लिए , तत्वों का प्रकार और वेक्टर की लंबाई मौजूद होना चाहिए।

(vector * 100)