ट्रैक
/
Common Lisp
Common Lisp
/
अभ्यास
/
गीगासेकंड वर्षगाँठ
गीगासेकंड वर्षगाँठ

गीगासेकंड वर्षगाँठ

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

परिचय

दिनांक और समय

Common Lisp में समय को चार तरीकों से दर्शाया जाता है, जिनमें से दो पर यहाँ चर्चा की जाएगी।

  • यूनिवर्सल टाइम एक निरपेक्ष समय है, एक ऐसा पूर्णांक जो 1900-01-01T00:00:00Z से बीते हुए सेकंडों की संख्या बताता है (यानी UTC में 1 जनवरी 1900 की मध्यरात्रि)।
  • डिकोडेड टाइम 9 वैल्यू का एक टपल है, जो मिलकर किसी खास कैलेंडर समय को दर्शाती हैं: सेकंड, मिनट, घंटा, महीने का दिन, महीना, साल, सप्ताह का दिन, डेलाइट सेविंग टाइम फ्लैग, टाइम ज़ोन। (नीचे इस पर विस्तार से चर्चा की गई है।)

यूनिवर्सल टाइम

मौजूदा यूनिवर्सल टाइम पाने के लिए आप get-universal-time या get-decoded-time का इस्तेमाल करते हैं। पहला 1900-01-01T00:00Z से अब तक के सेकंड लौटाता है और दूसरा वही डेटा डिकोडेड रूप में लौटाता है।

डिकोडेड टाइम

decode-universal-time और encode-universal-time समय के साथ काम करने वाले मुख्य फंक्शन हैं। पहला एक यूनिवर्सल टाइम लेता है और एक से अधिक वैल्यू के रूप में एक डिकोडेड टाइम वैल्यू लौटाता है, और दूसरा डिकोडेड टाइम वैल्यू को आर्गुमेंट के रूप में लेकर एक यूनिवर्सल टाइम लौटाता है।

दोनों एक वैकल्पिक टाइम ज़ोन आर्गुमेंट लेते हैं। टाइम ज़ोन का फॉर्मैट नीचे देखिए।

डिकोडेड टाइम कई वैल्यू का समूह है:

  • सेकंड: 0 से 59 के बीच का पूर्णांक
  • मिनट: 0 से 59 के बीच का पूर्णांक
  • घंटा: 0 से 23 के बीच का पूर्णांक
  • महीने का दिन: 1 से 31 के बीच का पूर्णांक (ऊपरी सीमा वास्तव में महीने और साल पर निर्भर करती है)
  • महीना: 1 से 12 के बीच का पूर्णांक
  • साल: साल बताने वाला पूर्णांक।
  • सप्ताह का दिन: 0 से 6 के बीच का पूर्णांक। 0 का मतलब सोमवार, 1 का मतलब मंगलवार, वगैरह... 6 का मतलब रविवार।
  • डेलाइट सेविंग टाइम फ्लैग: सही वैल्यू का मतलब है कि डेलाइट सेविंग टाइम लागू है।
  • टाइम ज़ोन: -24 से 24 के बीच घंटों की संख्या, जो UTC से ऑफसेट बताती है। यह संख्या एक परिमेय संख्या है और 1/3600 का गुणज होनी चाहिए।
(encode-universal-time 1 2 3 4 5 2000 0) ; => 3166398121
(decode-universal-time 3166398121)       ; => 1
                                         ;    2
                                         ;    3
                                         ;    4
                                         ;    5
                                         ;    2000
                                         ;    3 (Thursday)
                                         ;    NIL
                                         ;    0
(decode-universal-time 2208988800) ; => 0
                                   ;    0
                                   ;    0
                                   ;    1
                                   ;    1
                                   ;    1970
                                   ;    3
                                   ;    NIL
                                   ;    0

एक से अधिक वैल्यू

Common Lisp में एक फंक्शन सिर्फ एक ही वैल्यू नहीं लौटा सकता, बल्कि एक से अधिक वैल्यू भी लौटा सकता है। उदाहरण के लिए floor, जो किसी संख्या को शून्य की ओर नीचे की तरफ गोल करता है, दो वैल्यू लौटाता है: पहली गोल की गई वैल्यू होती है और दूसरी शेषफल।

(floor 3.5) ; => 3
            ;    0.5

(एक से अधिक वैल्यू लौटने पर हम उन्हें आउटपुट की अलग-अलग लाइनों में दिखाएँगे।)

एक से अधिक वैल्यू लौटाना

अगर आप चाहते हैं कि कोई फंक्शन एक से अधिक वैल्यू लौटाए, तो आप values एक्सेसर इस्तेमाल करते हैं:

(defun three-numbers () (values 1 2 3))
(three-numbers) ; => 1
                ;    2
                ;    3

एक से अधिक वैल्यू संभालना

अगर आपको सिर्फ पहली वैल्यू से मतलब है, तो आपको कोई खास काम करने की ज़रूरत नहीं है, भाषा खुद इसका ध्यान रख लेती है:

(+ (values 1 2 3) (values 10 20 30)) ; => 11

लेकिन अगर आप उन बाकी वैल्यू तक पहुँचना चाहते हैं, तो इसके लिए आपको कई फंक्शन इस्तेमाल करने पड़ेंगे। दो मुख्य मैक्रो multiple-value-list और multiple-value-bind हैं। इनका इस्तेमाल ऐसी चीज़ को लपेटने के लिए किया जाता है जो एक से अधिक वैल्यू लौटाती है और सारी वैल्यू पकड़ लेती है। पहला सारी वैल्यू की एक लिस्ट बनाता है। दूसरा आपको हर वैल्यू को एक वेरिएबल में असाइन करने देता है।

(multiple-value-list (values 1 2 3))                   ; => (1 2 3)
(multiple-value-bind (a b c) (values 1 2 3) 
   (+ a b c)) ; => 6

एक और उपयोगी फंक्शन nth-value है।

निर्देश

Lisp के एलियन वर्षगांठें मनाना पसंद करते हैं। उनके लिए एक महत्वपूर्ण वर्षगांठ की तारीख गीगासेकंड होती है। यानी घटना के 1,000,000,000 सेकंड बाद।

1. गीगासेकंड वर्षगांठ की तारीख की गणना कीजिए

एक फंक्शन from लिखिए। यह 6 पैरामीटर लेता है: year, month, day, hour, min, sec। यह फंक्शन गीगासेकंड वर्षगांठ की तारीख और समय की गणना करता है। इस फंक्शन को तारीख ऐसे ऐरे के रूप में लौटानी चाहिए जिसका क्रम और अर्थ इनपुट के पैरामीटर जैसा ही हो।

(from 2000 1 1 0 0 0) ; => (2031 9 9 1 46 40)
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Common Lisp Exercism

गीगासेकंड वर्षगाँठ शुरू करने के लिए तैयार हैं?

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