LISP - Numeri

Common Lisp definisce diversi tipi di numeri. Ilnumber il tipo di dati include vari tipi di numeri supportati da LISP.

I tipi di numero supportati da LISP sono:

  • Integers
  • Ratios
  • Numeri in virgola mobile
  • Numeri complessi

Il diagramma seguente mostra la gerarchia dei numeri e vari tipi di dati numerici disponibili in LISP -

Vari tipi numerici in LISP

La tabella seguente descrive vari tipi di dati numerici disponibili in LISP -

Sr.No. Tipo di dati e descrizione
1

fixnum

Questo tipo di dati rappresenta numeri interi non troppo grandi e per lo più nell'intervallo da -215 a 215-1 (dipende dalla macchina)

2

bignum

Questi sono numeri molto grandi con dimensioni limitate dalla quantità di memoria allocata per LISP, non sono numeri fissi.

3

ratio

Rappresenta il rapporto tra due numeri nella forma numeratore / denominatore. La funzione / produce sempre il risultato in rapporti, quando i suoi argomenti sono numeri interi.

4

float

Rappresenta numeri non interi. Esistono quattro tipi di dati in virgola mobile con precisione crescente.

5

complex

Rappresenta numeri complessi, indicati con #c. Le parti reale e immaginaria potrebbero essere sia numeri razionali che numeri in virgola mobile.

Esempio

Crea un nuovo file di codice sorgente denominato main.lisp e digita il codice seguente.

(write (/ 1 2))
(terpri)
(write ( + (/ 1 2) (/ 3 4)))
(terpri)
(write ( + #c( 1 2) #c( 3 -4)))

Quando esegui il codice, restituisce il seguente risultato:

1/2
5/4
#C(4 -2)

Funzioni numeriche

La tabella seguente descrive alcune funzioni numeriche di uso comune:

Sr.No. Descrizione della funzione
1

+, -, *, /

Rispettive operazioni aritmetiche

2

sin, cos, tan, acos, asin, atan

Rispettive funzioni trigonometriche.

3

sinh, cosh, tanh, acosh, asinh, atanh

Rispettive funzioni iperboliche.

4

exp

Funzione di esponenziazione. Calcola e x

5

expt

Funzione di esponenziazione, prende sia base che potenza.

6

sqrt

Calcola la radice quadrata di un numero.

7

log

Funzione logaritmica. Se viene fornito un parametro, calcola il suo logaritmo naturale, altrimenti il ​​secondo parametro viene utilizzato come base.

8

conjugate

Calcola il complesso coniugato di un numero. In caso di un numero reale, restituisce il numero stesso.

9

abs

Restituisce il valore assoluto (o grandezza) di un numero.

10

gcd

Calcola il massimo comune divisore dei numeri dati.

11

lcm

Calcola il minimo comune multiplo dei numeri dati.

12

isqrt

Fornisce il numero intero più grande minore o uguale alla radice quadrata esatta di un dato numero naturale.

13

floor, ceiling, truncate, round

Tutte queste funzioni accettano due argomenti come un numero e restituiscono il quoziente; floor restituisce il numero intero più grande che non è maggiore del rapporto, ceiling sceglie il numero intero più piccolo che è maggiore del rapporto, truncate sceglie il numero intero dello stesso segno come rapporto con il valore assoluto più grande che è inferiore al valore assoluto di rapporto, e round sceglie un numero intero più vicino al rapporto.

14

ffloor, fceiling, ftruncate, fround

Fa lo stesso come sopra, ma restituisce il quoziente come numero in virgola mobile.

15

mod, rem

Restituisce il resto in un'operazione di divisione.

16

float

Converte un numero reale in un numero in virgola mobile.

17

rational, rationalize

Converte un numero reale in un numero razionale.

18

numerator, denominator

Restituisce le rispettive parti di un numero razionale.

19

realpart, imagpart

Restituisce la parte reale e immaginaria di un numero complesso.

Esempio

Crea un nuovo file di codice sorgente denominato main.lisp e digita il codice seguente.

(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))

Quando esegui il codice, restituisce il seguente risultato:

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