Common Lispben egy globális függvényt a defun kifejezéssel definiálsz.
Ez a kifejezés első argumentumaként a paraméterek listáját kapja (az üres lista azt jelenti, hogy a függvénynek nincs paramétere).
Ezt egy opcionális dokumentációs string követi (lásd lentebb), majd nulla vagy több kifejezés, amelyek a függvény „törzsét” alkotják.
A függvényeknek nulla vagy több paramétere lehet.
(defun no-args () (+ 1 1))
(defun add-one (x) (1+ x))
(defun add-nums (x y) (+ x y))
Egy függvényt úgy hívsz meg, hogy kiértékelsz egy kifejezést, amelynek első eleme a függvényt jelölő szimbólum, a többi eleme pedig a függvény argumentumai (ha vannak).
A függvény értéke a függvény törzsében kiértékelt utolsó kifejezés értéke. Minden függvény kiértékelődik valamilyen értékre.
(add-nums 2 2) ;; => 4
A függvényeknek opcionálisan lehet dokumentációs stringjük (más néven „docstring”).
Ha megadod, az argumentumlista után, de a függvény törzse előtt áll.
A dokumentációs stringhez a documentation segítségével férhetsz hozzá.
(defun add-nums (x y) "Add X and Y together" (+ x y))
(documentation 'add-nums 'function) ;; => "Add X and Y together"
;; Note that if one provides a docstring but fails to provide a body
;; then the docstring is interpreted by Common Lisp as the body, not
;; the docstring
(defun no-body ())
(no-body) ;; => NIL
(defun mistake () "This is not a docstring")
(mistake) ;; => "This is not a docstring"
(documentation 'mistake 'function) ;; => NIL
Lilly, a Lisp-űrlény visszatért, és megint főz! Ezúttal Lisp-űrlény-lasagne-t készít, amely nem is különbözik annyira az emberi lasagne-tól.
Lillynek néhány függvényt kell írnunk, amelyek segítenek kiszámolni a lasagne elkészítésének időzítését. Ráadásul mindegyikhez jó dokumentációra van szükség, hogy Lilly ne felejtse el, mit csinál.
Segítesz Lillynek megírni a függvényeket, amelyek segítenek időzíteni a lasagne elkészítését?
Definiáld az expected-time-in-oven függvényt, amely nem vesz át egyetlen paramétert sem, és visszaadja, hogy hány percet kell a lasagne-nak a sütőben töltenie. A Lisp-űrlény hagyomány szerint (éppúgy, ahogy Lilly szülőegysége szokott főzni), a várható sütési idő 337 perc:
(expected-time-in-oven) ;; => 337
Definiáld a remaining-minutes-in-oven függvényt, amely paraméterként megkapja, hány percet volt eddig a lasagne a sütőben, és visszaadja, hogy hány percet kell még a sütőben töltenie, az előző feladatban megadott várható sütési idő alapján.
(remaining-minutes-in-oven 100) ;; => 237
Definiáld a preparation-time-in-minutes függvényt, amely paraméterként megkapja, hány réteget tett Lilly a lasagne-ba, és visszaadja, hogy hány percet töltött Lilly a lasagne előkészítésével, feltéve, hogy egy réteg elkészítése 19 percet vesz igénybe.
(preparation-time-in-minutes 3) ;; => 57
Definiáld az elapsed-time-in-minutes függvényt, amely két paramétert kap: az első paraméter a Lilly által a lasagne-ba tett rétegek száma, a második pedig az, hogy hány perce van a lasagne a sütőben. A függvény adja vissza, hogy hány percet dolgozott Lilly a lasagne elkészítésén, ami az előkészítési idő és a lasagne által eddig a sütőben töltött idő összege.
(elapsed-time-in-minutes 3 100) ;; => 157
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.