A Common Lispben az időt négyféleképpen ábrázolhatjuk, ezek közül itt kettőről lesz szó.
1900-01-01T00:00:00Z óta eltelt másodpercek számát adja meg (vagyis 1900. január 1-jének éjfélét UTC-ben).Az aktuális univerzális idő lekéréséhez a get-universal-time vagy a get-decoded-time függvényt használjuk.
Az előbbi az 1900-01-01T00:00Z óta eltelt másodperceket adja vissza, az utóbbi pedig ugyanezeket az adatokat dekódolt formában.
A decode-universal-time és az encode-universal-time a legfontosabb függvények, ha az idővel dolgozunk.
Az előbbi egy univerzális időt vesz át, és dekódolt időértéket ad vissza több értékként, az utóbbi pedig argumentumként a dekódolt időértékeket veszi át, és univerzális időt ad vissza.
Mindkettő fogadhat egy opcionális időzóna argumentumot. Az időzóna formátumát lásd alább.
A dekódolt idő a következő értékekből áll:
1/3600 többszörösének kell lennie(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
A Common Lispben egy függvény nemcsak egy értéket adhat vissza, hanem többet is.
Vegyük például a floor függvényt, amely lefelé, a nulla felé kerekít: két értéket ad vissza, az első a kerekített érték, a második pedig a maradék.
(floor 3.5) ; => 3
; 0.5
(A több visszaadott értéket a kimenet külön soraiban mutatjuk majd.)
Ha azt szeretnéd, hogy egy függvény több értéket adjon vissza, a values accessort használod:
(defun three-numbers () (values 1 2 3))
(three-numbers) ; => 1
; 2
; 3
Ha csak az első érték érdekel, nem kell semmi különöset tenned, a nyelv elintézi helyetted:
(+ (values 1 2 3) (values 10 20 30)) ; => 11
Ha viszont a többi értékhez is hozzá szeretnél férni, több függvényt kell használnod.
Két fő makró a multiple-value-list és a multiple-value-bind.
Mindkettő arra szolgál, hogy körbevegyen valamit, ami több értéket ad vissza, és elkapja az összeset.
Az első listát készít az összes értékből.
A második lehetővé teszi, hogy változókat köss az egyes értékekhez.
(multiple-value-list (values 1 2 3)) ; => (1 2 3)
(multiple-value-bind (a b c) (values 1 2 3)
(+ a b c)) ; => 6
Egy másik hasznos függvény az nth-value.
A Lisp Aliens szereti megünnepelni az évfordulókat. Számukra egy fontos évfordulós dátum a gigaszekundum. Azaz 1 000 000 000 másodperc az esemény óta.
Írj egy from függvényt, amely 6 paramétert kap: year, month, day, hour, min, sec, és kiszámítja a gigaszekundumos évforduló dátumát és időpontját.
A függvény a dátumot ugyanolyan sorrendben és jelentéssel adja vissza listaként, mint a bemenet paraméterei.
(from 2000 1 1 0 0 0) ; => (2031 9 9 1 46 40)
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Common Lisp nyelvet 27 fogalom92 feladat segítségével, valódi emberi mentorálással, mindez ingyen.