Common Lisp-এ সময় চারটি উপায়ে প্রকাশ করা হয়, যার মধ্যে দুটি নিয়ে এখানে আলোচনা করা হবে।
1900-01-01T00:00:00Z থেকে অতিক্রান্ত সেকেন্ডের সংখ্যা প্রকাশ করে (অর্থাৎ UTC-তে ১৯০০ সালের ১ জানুয়ারির মধ্যরাত)।বর্তমান ইউনিভার্সাল টাইম পেতে 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 এলিয়েনরা বার্ষিকী উদযাপন করতে পছন্দ করে। তাদের কাছে একটি গুরুত্বপূর্ণ বার্ষিকীর তারিখ হলো গিগাসেকেন্ড। অর্থাৎ, ঘটনাটির ১,০০,০০,০০,০০০ সেকেন্ড পর।
একটি from ফাংশন লিখুন, যা ৬টি প্যারামিটার নেয়: year, month, day, hour, min, sec, এবং গিগাসেকেন্ড বার্ষিকীর তারিখ ও সময় গণনা করে।
এই ফাংশনের ইনপুটের প্যারামিটারগুলোর মতো একই ক্রমে ও একই অর্থে তারিখটি একটি অ্যারে হিসেবে রিটার্ন করা উচিত।
(from 2000 1 1 0 0 0) ; => (2031 9 9 1 46 40)
Exercism-এ সাইন আপ করুন, Common Lisp ট্র্যাকের 27টি কনসেপ্ট92টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।