A Common Lispben, mint sok más nyelvben, a számoknak többféle típusa van. Ezek közül a két legalapvetőbb:
Mint sok más nyelv, a Common Lisp is ismeri az egész számokat.
Ezek olyan egész értékek, amelyekben nincs tizedespont (például -6, 0, 25, 1234 stb.).
A Common Lisp nem szab határt az egész számok nagyságának. Az egész számok tetszőlegesen nagyok (vagy negatív esetben kicsik) lehetnek.
Általában, ha csak egész számokkal dolgozol, részesítsd előnyben az egész számokat, mert sok számítás során nem szenvedik el ugyanazt a pontosságvesztést, mint a lebegőpontos számok.
Mint sok más nyelvben, a Common Lispben is vannak lebegőpontos számok.
Ezek tört- vagy egész értékek, amelyek tizedespontot tartalmaznak (például 3.14, -1.7, 99.99, 2048.0).
A Common Lisp a legtöbb művelethez a szokásos aritmetikai operátorokat használja, de abban némileg egyedi, hogy „prefix jelölést” használ a megszokottabb „infix jelöléssel” szemben.
Hogy ez vizuálisan is világos legyen:
;; Infix-notation (non-lisp languages)
1 + 2 + 3 + 4 + 5 ; => 15
;; Prefix-notation (lisp languages)
(+ 1 2 3 4 5) ; => 15
Bár a prefix jelölés néhány műveletet, például a 2 + 2-t a némileg szokatlan (+ 2 2) formába írja át, sokkal könnyebbé teszi, hogy egyszerre több számmal dolgozz.
A Common Lispben megtalálható az összes tipikus függvény: +, -, *, / az összeadáshoz, kivonáshoz, szorzáshoz és osztáshoz.
Az osztásnál felmerülhet, hogy érdekel egy osztás maradéka. Ezt a mod (modulo) függvény végzi el, amely egy számot és egy osztót kap argumentumként:
(mod 4 2) ; => 0
(mod 2 4) ; => 2
(mod 10 3) ; => 1
Végül hasznos lehet, ha különböző számokat hasonlítasz össze olyan függvényekkel, mint a = (egyenlő), a /= (nem egyenlő) és a >= (nagyobb vagy egyenlő).
Amikor ezek az összehasonlítások igazak (mint a (= 1 1) esetén), T-t adnak vissza, amikor pedig nem (mint a (> 0 1) esetén), NIL-t.
Lilly, a Lisp-űrlakó imád főzni. Pizzabulit szeretne rendezni a barátaival, de hogy a lehető legtöbbet hozza ki a hozzávalókból, pontosan tudni szeretné, mennyi kell majd az egyes hozzávalókból, mielőtt belekezd.
Ennek megoldására Lilly írt egy programot, amely a tervezés egy részét automatizálja, de a segítségedre van szüksége, hogy befejezze. Segítesz Lillynek megrendezni az arányaiban tökéletes pizzabulit?
Kezdjük az elején: minden remek pizza egy finom tésztával kezdődik!
Lilly a vékony, ropogós, de vastagabb szélű pizzákat kedveli. A középső részhez fixen 200 g tészta kell, a perem minden 20 cm-éhez pedig 45 g tészta.
Szerencsére Lilly felírta az egyenletet, amellyel a tészta grammjai (g) kiszámíthatók a pizzák számából (n) és azok átmérőjéből (d):
g = n * (((45 * pi * d) / 20) + 200)
Lillynek egy olyan függvényre van szüksége, amely:
Például 4 darab 30 cm átmérőjű pizza elkészítéséhez:
(dough-calculator 4 30) ; => 1648
Lilly nagyon precíz, amikor felkeni a szószt, a pizzái mérete azonban ingadozó lehet.
Az átmérő (d) meghatározásához az alábbi egyenletet használja, amelyben a felhasznált szósz (s) a változó:
d = square-root of ((40 * s) / (3 * pi))
Lillynek egy olyan függvényre van szüksége, amely a felhasznált szósz minden milliliteréből (s) kiszámítja a pizza átmérőjét (d).
Például ha Lilly 250 ml szószt használt fel:
(size-from-sauce 250) ; => 32.57
Lilly bolygóján minden sajt tökéletes kocka formájában kapható, és méretre árulják. (Mire számítottál? Végül is ez egy idegen bolygó...)
Lilly ismét felírt egy egyenletet, amellyel kiszámítható, hány darab (n) adott átmérőjű (d) pizza készíthető egy l oldalhosszúságú sajtkockából:
n = (2 * (l^3)) / (3* pi * (d^2))
Készíts egy olyan függvényt, amely:
Például egy 25x25x25 cm-es sajtkocka és 30 cm átmérőjű pizzák esetén:
(pizzas-per-cube 25 30) ; => 3
Végül Lilly azt szeretné, hogy minden pizzája 8 szeletre legyen vágva, és azok egyenletesen osszanak el a barátai között.
Készíts egy olyan függvényt, amely:
T-t ad vissza, ha a pizzák egyenletesen eloszthatók a barátok között, egyébként NIL-t.Például:
;; For splitting 3 pizzas between 4 friends
(fair-share-p 3 4) ; => T
;; For splitting 2 pizzas between 3 friends
(fair-share-p 2 3) ; => NIL
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.