LISP - Números

Lisp comum define vários tipos de números. onumber tipo de dados inclui vários tipos de números suportados pelo LISP.

Os tipos de número suportados pelo LISP são -

  • Integers
  • Ratios
  • Números de ponto flutuante
  • Números complexos

O diagrama a seguir mostra a hierarquia numérica e vários tipos de dados numéricos disponíveis no LISP -

Vários tipos numéricos em LISP

A tabela a seguir descreve vários tipos de dados de número disponíveis no LISP -

Sr. Não. Tipo de dados e descrição
1

fixnum

Este tipo de dados representa números inteiros que não são muito grandes e principalmente na faixa de -215 a 215-1 (é dependente da máquina)

2

bignum

Esses são números muito grandes com tamanho limitado pela quantidade de memória alocada para LISP, eles não são números fixos.

3

ratio

Representa a proporção de dois números na forma de numerador / denominador. A função / sempre produz o resultado em proporções, quando seus argumentos são inteiros.

4

float

Ele representa números não inteiros. Existem quatro tipos de dados flutuantes com precisão crescente.

5

complex

Ele representa números complexos, que são denotados por #c. As partes reais e imaginárias podem ser números de ponto flutuante ou racionais.

Exemplo

Crie um novo arquivo de código-fonte denominado main.lisp e digite o seguinte código nele.

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

Quando você executa o código, ele retorna o seguinte resultado -

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

Funções numéricas

A tabela a seguir descreve algumas funções numéricas comumente usadas -

Sr. Não. Descrição da função
1

+, -, *, /

Respectivas operações aritméticas

2

sin, cos, tan, acos, asin, atan

Respectivas funções trigonométricas.

3

sinh, cosh, tanh, acosh, asinh, atanh

Respectivas funções hiperbólicas.

4

exp

Função de exponenciação. Calcula e x

5

expt

Função de exponenciação, leva tanto a base quanto a potência.

6

sqrt

Ele calcula a raiz quadrada de um número.

7

log

Função logarítmica. Se um parâmetro é dado, ele calcula seu logaritmo natural, caso contrário, o segundo parâmetro é usado como base.

8

conjugate

Ele calcula o conjugado complexo de um número. No caso de um número real, ele retorna o próprio número.

9

abs

Ele retorna o valor absoluto (ou magnitude) de um número.

10

gcd

Ele calcula o maior divisor comum dos números fornecidos.

11

lcm

Ele calcula o mínimo múltiplo comum dos números fornecidos.

12

isqrt

Ele dá o maior inteiro menor ou igual à raiz quadrada exata de um determinado número natural.

13

floor, ceiling, truncate, round

Todas essas funções recebem dois argumentos como um número e retornam o quociente; floor retorna o maior inteiro que não é maior que a proporção, ceiling escolhe o número inteiro menor que é maior que a proporção, truncate escolhe o número inteiro do mesmo sinal como proporção com o maior valor absoluto que é menor do que o valor absoluto da proporção, e round escolhe um número inteiro mais próximo da proporção.

14

ffloor, fceiling, ftruncate, fround

Faz o mesmo que acima, mas retorna o quociente como um número de ponto flutuante.

15

mod, rem

Retorna o resto em uma operação de divisão.

16

float

Converte um número real em um número de ponto flutuante.

17

rational, rationalize

Converte um número real em um número racional.

18

numerator, denominator

Retorna as respectivas partes de um número racional.

19

realpart, imagpart

Retorna a parte real e imaginária de um número complexo.

Exemplo

Crie um novo arquivo de código-fonte denominado main.lisp e digite o seguinte código nele.

(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 você executa o código, ele retorna o seguinte 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