LISP - Zahlen
Common Lisp definiert verschiedene Arten von Zahlen. Dasnumber Der Datentyp enthält verschiedene Arten von Nummern, die von LISP unterstützt werden.
Die von LISP unterstützten Nummerntypen sind -
- Integers
- Ratios
- Gleitkommazahlen
- Komplexe Zahlen
Das folgende Diagramm zeigt die Zahlenhierarchie und verschiedene numerische Datentypen, die in LISP verfügbar sind -
Verschiedene numerische Typen in LISP
In der folgenden Tabelle werden verschiedene in LISP verfügbare Nummerntypdaten beschrieben.
Sr.Nr. | Datentyp & Beschreibung |
---|---|
1 | fixnum Dieser Datentyp stellt Ganzzahlen dar, die nicht zu groß sind und meist im Bereich von -215 bis 215-1 liegen (er ist maschinenabhängig). |
2 | bignum Dies sind sehr große Zahlen, deren Größe durch die für LISP zugewiesene Speichermenge begrenzt ist. Es handelt sich nicht um feste Zahlen. |
3 | ratio Stellt das Verhältnis zweier Zahlen in der Zähler / Nenner-Form dar. Die / -Funktion erzeugt das Ergebnis immer in Verhältnissen, wenn ihre Argumente ganze Zahlen sind. |
4 | float Es repräsentiert nicht ganzzahlige Zahlen. Es gibt vier Float-Datentypen mit zunehmender Genauigkeit. |
5 | complex Es stellt komplexe Zahlen dar, die mit #c bezeichnet sind. Der Realteil und der Imaginärteil können entweder rationale oder Gleitkommazahlen sein. |
Beispiel
Erstellen Sie eine neue Quellcodedatei mit dem Namen main.lisp und geben Sie den folgenden Code ein.
(write (/ 1 2))
(terpri)
(write ( + (/ 1 2) (/ 3 4)))
(terpri)
(write ( + #c( 1 2) #c( 3 -4)))
Wenn Sie den Code ausführen, wird das folgende Ergebnis zurückgegeben:
1/2
5/4
#C(4 -2)
Zahlenfunktionen
In der folgenden Tabelle werden einige häufig verwendete numerische Funktionen beschrieben.
Sr.Nr. | Bedienungsanleitung |
---|---|
1 | +, -, *, / Entsprechende arithmetische Operationen |
2 | sin, cos, tan, acos, asin, atan Jeweils trigonometrische Funktionen. |
3 | sinh, cosh, tanh, acosh, asinh, atanh Entsprechende hyperbolische Funktionen. |
4 | exp Exponentiationsfunktion. Berechnet e x |
5 | expt Exponentiationsfunktion, nimmt Basis und Macht beide. |
6 | sqrt Es berechnet die Quadratwurzel einer Zahl. |
7 | log Logarithmische Funktion. Wenn ein Parameter angegeben wird, berechnet er seinen natürlichen Logarithmus, andernfalls wird der zweite Parameter als Basis verwendet. |
8 | conjugate Es berechnet das komplexe Konjugat einer Zahl. Bei einer reellen Zahl wird die Zahl selbst zurückgegeben. |
9 | abs Es gibt den absoluten Wert (oder die Größe) einer Zahl zurück. |
10 | gcd Es berechnet den größten gemeinsamen Teiler der angegebenen Zahlen. |
11 | lcm Es berechnet das kleinste gemeinsame Vielfache der angegebenen Zahlen. |
12 | isqrt Es gibt die größte ganze Zahl, die kleiner oder gleich der exakten Quadratwurzel einer gegebenen natürlichen Zahl ist. |
13 | floor, ceiling, truncate, round Alle diese Funktionen verwenden zwei Argumente als Zahl und geben den Quotienten zurück. floor Gibt die größte Ganzzahl zurück, die nicht größer als das Verhältnis ist. ceiling wählt die kleinere ganze Zahl, die größer als das Verhältnis ist, truncate wählt die ganze Zahl mit dem gleichen Vorzeichen wie das Verhältnis mit dem größten absoluten Wert, der kleiner als der absolute Wert des Verhältnisses ist, und round wählt eine Ganzzahl, die dem Verhältnis am nächsten kommt. |
14 | ffloor, fceiling, ftruncate, fround Funktioniert wie oben, gibt jedoch den Quotienten als Gleitkommazahl zurück. |
15 | mod, rem Gibt den Rest in einer Divisionsoperation zurück. |
16 | float Konvertiert eine reelle Zahl in eine Gleitkommazahl. |
17 | rational, rationalize Wandelt eine reelle Zahl in eine rationale Zahl um. |
18 | numerator, denominator Gibt die jeweiligen Teile einer rationalen Zahl zurück. |
19 | realpart, imagpart Gibt den Real- und Imaginärteil einer komplexen Zahl zurück. |
Beispiel
Erstellen Sie eine neue Quellcodedatei mit dem Namen main.lisp und geben Sie den folgenden Code ein.
(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))
Wenn Sie den Code ausführen, wird das folgende Ergebnis zurückgegeben:
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