ट्रैक
/
Factor
Factor
/
अभ्यास
/
ड्रैगनों के वंशज
ड्रैगनों के वंशज

ड्रैगनों के वंशज

सीखने का अभ्यास

परिचय

टपल किसी अन्य टपल का विस्तार कर सकते हैं। TUPLE: child < parent slots ; से ऐसी क्लास घोषित होती है जिसके इंस्टेंस parent के भी इंस्टेंस होते हैं। इन्हें अपने स्लॉट के अतिरिक्त parent के स्लॉट भी मिलते हैं, और parent के एक्सेसर इन पर भी वैसे ही काम करते हैं जैसे वे child पर ही परिभाषित हुए हों।

USING: accessors ;

TUPLE: animal name age ;
TUPLE: dog < animal breed ;

"Rex" 4 "labrador" dog boa .
! => T{ dog { name "Rex" } { age 4 } { breed "labrador" } }

"Rex" 4 "labrador" dog boa name>> .   ! => "Rex"   (inherited accessor)

boa स्लॉट का क्रम

boa कंस्ट्रक्टर स्लॉट घोषणा के क्रम में, पहले पैरेंट लेता है। ऊपर दिए गए dog के लिए:

dog boa ( name age breed -- dog )

एक और अगली पीढ़ी की क्लास, puppy < dog , जो weeks जोड़ती है, ऐसी होगी:

puppy boa ( name age breed weeks -- puppy )

प्रेडिकेट का पदानुक्रम

हर TUPLE: घोषणा एक प्रेडिकेट (name?) बनाती है। इनहेरिटेंस के साथ ये प्रेडिकेट एक के अंदर एक हो जाते हैं। हर वंशज अपने पूर्वजों के प्रेडिकेट को संतुष्ट करता है:

"Rex" 4 "labrador" dog boa
dup dog? .        ! => t
dup animal? .     ! => t

इसका उल्टा सही नहीं है: जो animal dog नहीं है, वह dog? में फेल हो जाता है।

आगे की बात

जेनेरिक मेथड (M:, जिन्हें generics में पढ़ाया गया है) भी पदानुक्रम में ऊपर की ओर डिस्पैच करते हैं। animal पर बना मेथड हर वंशज के लिए चलता है, जब तक कि कोई अधिक विशिष्ट ओवरराइड प्राथमिकता न ले ले। यह आप इस अभ्यास के ठीक बाद boatswains-bilge में देखेंगे।

निर्देश

एक प्रकृतिवादी काल्डेरा के आसपास रहने वाले ड्रैगनों की सूची बना रहा है। इन सब में कुछ बातें समान हैं: हर ड्रैगन का एक नाम, रंग और उम्र होती है। लेकिन हर ड्रैगन अपने-अपने खास तरीके से अलग भी है। आप ड्रैगन क्लासों का एक छोटा इनहेरिटेंस ट्री बनाएँगे, और एक ऐसा शब्द भी लिखेंगे जो किसी भी वंशज की उम्र बढ़ा देता है।

1. ड्रैगन परिवार

शुरू में ही टपल क्लासों का पूरा इनहेरिटेंस ट्री बना दीजिए (इनके कंस्ट्रक्टर आगे के कामों में आएँगे):

  • dragon, जिसमें name, color और age स्लॉट हों।
  • fire-dragon, जो dragon की सबक्लास है और एक flame-temp स्लॉट जोड़ती है।
  • ice-dragon, जो dragon की एक और सबक्लास है और एक chill-temp स्लॉट जोड़ती है।
  • volcano-dragon, जो fire-dragon की सबक्लास है और एक lava-volume स्लॉट जोड़ती है।

इसके बाद dragon को एक <dragon> कंस्ट्रक्टर दीजिए।

"Falkor" "white" 100 <dragon> name>> .   ! => "Falkor"

2. आग उगलने वाले

fire-dragon को एक <fire-dragon> कंस्ट्रक्टर दीजिए।

"Smaug" "red" 500 1200 <fire-dragon> flame-temp>> .   ! => 1200
"Smaug" "red" 500 1200 <fire-dragon> dragon? .        ! => t

3. बर्फ उगलने वाले

ice-dragon को एक <ice-dragon> कंस्ट्रक्टर दीजिए।

"Frosty" "blue" 200 -40 <ice-dragon> chill-temp>> .   ! => -40
"Frosty" "blue" 200 -40 <ice-dragon> fire-dragon? .   ! => f   (siblings)

4. ज्वालामुखी में रहने वाले

volcano-dragon को एक <volcano-dragon> कंस्ट्रक्टर दीजिए।

"Vesuvius" "red" 1000 1500 99 <volcano-dragon> dragon? .       ! => t
"Vesuvius" "red" 1000 1500 99 <volcano-dragon> fire-dragon? .  ! => t

5. किसी भी ड्रैगन की उम्र बढ़ाना

age-dragon को ऐसे बनाइए कि वह किसी भी ड्रैगन (या उसके वंशज) के age स्लॉट को एक से बढ़ा दे। यह कुछ नहीं लौटाता।

"Falkor" "white" 100 <dragon> dup age-dragon age>> .   ! => 101

यही शब्द हर वंशज पर काम करना चाहिए। साझा एक्सेसर का पूरा उद्देश्य यही है।

GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Factor Exercism

ड्रैगनों के वंशज शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Factor को 47 कॉन्सेप्ट163 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।