LISP - Liczby
Common Lisp definiuje kilka rodzajów liczb. Pliknumber typ danych zawiera różne rodzaje liczb obsługiwane przez LISP.
Typy liczb obsługiwane przez LISP to -
- Integers
- Ratios
- Liczb zmiennoprzecinkowych
- Liczby zespolone
Poniższy diagram przedstawia hierarchię numerów i różne numeryczne typy danych dostępne w LISP -
Różne typy liczbowe w LISP
W poniższej tabeli opisano różne typy liczb dostępne w LISP -
Sr.No. | Typ danych i opis |
---|---|
1 | fixnum Ten typ danych reprezentuje liczby całkowite, które nie są zbyt duże i przeważnie mieszczą się w zakresie od -215 do 215-1 (zależy od maszyny) |
2 | bignum Są to bardzo duże liczby, których rozmiar jest ograniczony ilością pamięci przydzielonej dla LISP, nie są to liczby stałe. |
3 | ratio Reprezentuje stosunek dwóch liczb w postaci licznika / mianownika. Funkcja / zawsze daje wynik w proporcjach, gdy jej argumenty są liczbami całkowitymi. |
4 | float Reprezentuje liczby niecałkowite. Istnieją cztery typy danych zmiennoprzecinkowych o rosnącej precyzji. |
5 | complex Reprezentuje liczby zespolone, które są oznaczone przez #c. Części rzeczywiste i urojone mogą być liczbami wymiernymi lub zmiennoprzecinkowymi. |
Przykład
Utwórz nowy plik kodu źródłowego o nazwie main.lisp i wpisz w nim następujący kod.
(write (/ 1 2))
(terpri)
(write ( + (/ 1 2) (/ 3 4)))
(terpri)
(write ( + #c( 1 2) #c( 3 -4)))
Po wykonaniu kodu zwraca następujący wynik -
1/2
5/4
#C(4 -2)
Funkcje liczbowe
W poniższej tabeli opisano niektóre często używane funkcje numeryczne -
Sr.No. | Opis funkcji |
---|---|
1 | +, -, *, / Odpowiednie operacje arytmetyczne |
2 | sin, cos, tan, acos, asin, atan Odpowiednie funkcje trygonometryczne. |
3 | sinh, cosh, tanh, acosh, asinh, atanh Odpowiednie funkcje hiperboliczne. |
4 | exp Funkcja potęgowania. Oblicza e x |
5 | expt Funkcja potęgowania przyjmuje zarówno podstawę, jak i moc. |
6 | sqrt Oblicza pierwiastek kwadratowy z liczby. |
7 | log Funkcja logarytmiczna. Jeśli podany jest jeden parametr, oblicza on swój logarytm naturalny, w przeciwnym razie drugi parametr jest używany jako podstawa. |
8 | conjugate Oblicza sprzężony koniugat liczby. W przypadku liczby rzeczywistej zwraca samą liczbę. |
9 | abs Zwraca wartość bezwzględną (lub wielkość) liczby. |
10 | gcd Oblicza największy wspólny dzielnik podanych liczb. |
11 | lcm Oblicza najmniejszą wspólną wielokrotność podanych liczb. |
12 | isqrt Daje największą liczbę całkowitą mniejszą lub równą dokładnemu pierwiastkowi kwadratowemu z danej liczby naturalnej. |
13 | floor, ceiling, truncate, round Wszystkie te funkcje przyjmują dwa argumenty jako liczbę i zwracają iloraz; floor zwraca największą liczbę całkowitą, która nie jest większa niż współczynnik, ceiling wybiera mniejszą liczbę całkowitą, która jest większa niż współczynnik, truncate wybiera liczbę całkowitą o tym samym znaku co stosunek o największej wartości bezwzględnej, która jest mniejsza niż wartość bezwzględna stosunku, i round wybiera liczbę całkowitą, która jest najbliższa stosunkowi. |
14 | ffloor, fceiling, ftruncate, fround Robi to samo, co powyżej, ale zwraca iloraz jako liczbę zmiennoprzecinkową. |
15 | mod, rem Zwraca resztę z operacji dzielenia. |
16 | float Konwertuje liczbę rzeczywistą na liczbę zmiennoprzecinkową. |
17 | rational, rationalize Konwertuje liczbę rzeczywistą na liczbę wymierną. |
18 | numerator, denominator Zwraca odpowiednie części liczby wymiernej. |
19 | realpart, imagpart Zwraca część rzeczywistą i urojoną liczby zespolonej. |
Przykład
Utwórz nowy plik kodu źródłowego o nazwie main.lisp i wpisz w nim następujący kod.
(write (/ 45 78))
(terpri)
(write (floor 45 78))
(terpri)
(write (/ 3456 75))
(terpri)
(write (floor 3456 75))
(terpri)
(write (ceiling 3456 75))
(terpri)
(write (truncate 3456 75))
(terpri)
(write (round 3456 75))
(terpri)
(write (ffloor 3456 75))
(terpri)
(write (fceiling 3456 75))
(terpri)
(write (ftruncate 3456 75))
(terpri)
(write (fround 3456 75))
(terpri)
(write (mod 3456 75))
(terpri)
(setq c (complex 6 7))
(write c)
(terpri)
(write (complex 5 -9))
(terpri)
(write (realpart c))
(terpri)
(write (imagpart c))
Po wykonaniu kodu zwraca następujący wynik -
15/26
0
1152/25
46
47
46
46
46.0
47.0
46.0
46.0
6
#C(6 7)
#C(5 -9)
6
7