Forth के एक बहुत ही सरल उपसमूह के लिए एक एवैल्यूएटर बनाइए।
Forth एक स्टैक पर आधारित प्रोग्रामिंग भाषा है। Forth के एक छोटे उपसमूह के लिए एक बहुत ही बुनियादी एवैल्यूएटर बनाइए।
आपके एवैल्यूएटर को इन शब्दों का समर्थन करना होगा:
+, -, *, / (पूर्णांक अंकगणित)DUP, DROP, SWAP, OVER (स्टैक में बदलाव)आपके एवैल्यूएटर को परंपरागत सिंटैक्स का उपयोग करके नए शब्द बनाने का समर्थन भी करना होगा: : word-name definition ;।
चीज़ों को सरल रखने के लिए आपको केवल एक डेटा टाइप देना है: कम से कम 16 बिट आकार के चिह्नित पूर्णांक।
सिंटैक्स के लिए इन नियमों का पालन कीजिए: संख्या एक या अधिक (ASCII) अंकों का क्रम होती है, और शब्द एक या अधिक अक्षरों, अंकों, प्रतीकों या विराम-चिह्नों का ऐसा क्रम होता है जो संख्या न हो। (Forth में शायद थोड़े अलग नियम हैं, लेकिन यह काफी करीब है।)
शब्दों में छोटे और बड़े अक्षरों का कोई फर्क नहीं होता।
कभी-कभी आपके कोड में एक्सेप्शन को कस्टमाइज़ करने और उन्हें raise करने, दोनों की ज़रूरत पड़ती है। ऐसा करते समय आपको हमेशा एक सार्थक एरर संदेश शामिल करना चाहिए, जो बताए कि एरर का स्रोत क्या है। इससे आपका कोड पढ़ने में ज़्यादा आसान हो जाता है और डीबगिंग में बहुत मदद मिलती है।
कस्टम एक्सेप्शन नई एक्सेप्शन क्लास बनाकर बनाए जा सकते हैं (ज़्यादा जानकारी के लिए classes देखिए।), जो आम तौर पर Exception की सबक्लास होती हैं।
ऐसी स्थितियों में, जहाँ आप जानते हैं कि एरर का स्रोत किसी खास एक्सेप्शन टाइप से ही निकलेगा, आप Exception क्लास के अंतर्गत आने वाले built in error types में से किसी से इनहेरिट कर सकते हैं। एरर उठाते समय भी आपको एक सार्थक संदेश शामिल करना चाहिए।
इस खास अभ्यास में आपको एक कस्टम एक्सेप्शन बनाना है, जिसे स्टैक पर्याप्त रूप से न भरा होने पर उठाया/"फेंका" जाए। टेस्ट तभी पास होंगे जब आप एक उपयुक्त एक्सेप्शन को कस्टमाइज़ करेंगे, उस एक्सेप्शन को raise करेंगे, और उपयुक्त एरर संदेश शामिल करेंगे।
# subclassing the Exception to create a StackUnderflowError
class StackUnderflowError(Exception):
"""Exception raised when Stack is not full.
message: explanation of the error.
"""
def __init__(self, message):
self.message = message
# raising a StackUnderflowError
raise StackUnderflowError("Insufficient number of items in stack")
इसके अलावा, इस अभ्यास में आपको कई built-in exceptions को एरर संदेशों के साथ उठाना है।
किसी built-in exception को संदेश के साथ उठाने के लिए, संदेश को exception टाइप के आर्गुमेंट के रूप में लिखिए:
# an example when division by zero is attempted.
raise ZeroDivisionError("divide by zero")
#an example when the operation is undefined.
raise ValueError("undefined operation")
Exercism पर साइन अप कीजिए और Python को 17 कॉन्सेप्ट146 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।