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