در 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 تمرین و مربیگری انسانی واقعی یاد بگیرید و در آن استاد شوید، همهی اینها رایگان.