LISP - Números

Common Lisp define varios tipos de números. losnumber El tipo de datos incluye varios tipos de números admitidos por LISP.

Los tipos de números admitidos por LISP son:

  • Integers
  • Ratios
  • Números de punto flotante
  • Números complejos

El siguiente diagrama muestra la jerarquía numérica y varios tipos de datos numéricos disponibles en LISP:

Varios tipos numéricos en LISP

La siguiente tabla describe varios datos de tipos de números disponibles en LISP:

No Señor. Tipo de datos y descripción
1

fixnum

Este tipo de datos representa números enteros que no son demasiado grandes y en su mayoría en el rango de -215 a 215-1 (depende de la máquina)

2

bignum

Estos son números muy grandes con un tamaño limitado por la cantidad de memoria asignada para LISP, no son números fijos.

3

ratio

Representa la razón de dos números en forma de numerador / denominador. La función / siempre produce el resultado en proporciones, cuando sus argumentos son números enteros.

4

float

Representa números no enteros. Hay cuatro tipos de datos flotantes con una precisión creciente.

5

complex

Representa números complejos, que se indican con #c. Las partes reales e imaginarias pueden ser números de punto flotante o racionales.

Ejemplo

Cree un nuevo archivo de código fuente llamado main.lisp y escriba el siguiente código en él.

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

Cuando ejecuta el código, devuelve el siguiente resultado:

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

Funciones numéricas

La siguiente tabla describe algunas funciones numéricas de uso común:

No Señor. Función descriptiva
1

+, -, *, /

Operaciones aritméticas respectivas

2

sin, cos, tan, acos, asin, atan

Funciones trigonométricas respectivas.

3

sinh, cosh, tanh, acosh, asinh, atanh

Funciones hiperbólicas respectivas.

4

exp

Función de exponenciación. Calcula e x

5

expt

Función de exponenciación, toma base y potencia ambos.

6

sqrt

Calcula la raíz cuadrada de un número.

7

log

Función logarítmica. Se le da un parámetro, luego calcula su logaritmo natural; de lo contrario, el segundo parámetro se usa como base.

8

conjugate

Calcula el conjugado complejo de un número. En el caso de un número real, devuelve el propio número.

9

abs

Devuelve el valor absoluto (o magnitud) de un número.

10

gcd

Calcula el máximo común divisor de los números dados.

11

lcm

Calcula el mínimo común múltiplo de los números dados.

12

isqrt

Da el mayor número entero menor o igual que la raíz cuadrada exacta de un número natural dado.

13

floor, ceiling, truncate, round

Todas estas funciones toman dos argumentos como número y devuelven el cociente; floor devuelve el entero más grande que no es mayor que la relación, ceiling elige el número entero más pequeño que es mayor que la relación, truncate elige el número entero del mismo signo que la razón con el valor absoluto más grande que es menor que el valor absoluto de la razón, y round elige un número entero más cercano a la relación.

14

ffloor, fceiling, ftruncate, fround

Hace lo mismo que el anterior, pero devuelve el cociente como un número de punto flotante.

15

mod, rem

Devuelve el resto de una operación de división.

dieciséis

float

Convierte un número real en un número de coma flotante.

17

rational, rationalize

Convierte un número real en un número racional.

18

numerator, denominator

Devuelve las partes respectivas de un número racional.

19

realpart, imagpart

Devuelve la parte real e imaginaria de un número complejo.

Ejemplo

Cree un nuevo archivo de código fuente llamado main.lisp y escriba el siguiente código en él.

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

Cuando ejecuta el código, devuelve el siguiente resultado:

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