Common Lisp में समय को चार तरीकों से दर्शाया जाता है, जिनमें से दो पर यहाँ चर्चा की जाएगी।
1900-01-01T00:00:00Z से बीते हुए सेकंडों की संख्या बताता है (यानी UTC में 1 जनवरी 1900 की मध्यरात्रि)।मौजूदा यूनिवर्सल टाइम पाने के लिए आप get-universal-time या get-decoded-time का इस्तेमाल करते हैं।
पहला 1900-01-01T00:00Z से अब तक के सेकंड लौटाता है और दूसरा वही डेटा डिकोडेड रूप में लौटाता है।
decode-universal-time और encode-universal-time समय के साथ काम करने वाले मुख्य फंक्शन हैं।
पहला एक यूनिवर्सल टाइम लेता है और एक से अधिक वैल्यू के रूप में एक डिकोडेड टाइम वैल्यू लौटाता है, और दूसरा डिकोडेड टाइम वैल्यू को आर्गुमेंट के रूप में लेकर एक यूनिवर्सल टाइम लौटाता है।
दोनों एक वैकल्पिक टाइम ज़ोन आर्गुमेंट लेते हैं। टाइम ज़ोन का फॉर्मैट नीचे देखिए।
डिकोडेड टाइम कई वैल्यू का समूह है:
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 सेकंड बाद।
एक फंक्शन from लिखिए। यह 6 पैरामीटर लेता है: year, month, day, hour, min, sec। यह फंक्शन गीगासेकंड वर्षगांठ की तारीख और समय की गणना करता है।
इस फंक्शन को तारीख ऐसे ऐरे के रूप में लौटानी चाहिए जिसका क्रम और अर्थ इनपुट के पैरामीटर जैसा ही हो।
(from 2000 1 1 0 0 0) ; => (2031 9 9 1 46 40)
Exercism पर साइन अप कीजिए और Common Lisp को 27 कॉन्सेप्ट92 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।