LISP - Operadores
Um operador é um símbolo que informa ao compilador para executar manipulações matemáticas ou lógicas específicas. O LISP permite inúmeras operações em dados, suportadas por várias funções, macros e outras construções.
As operações permitidas nos dados podem ser categorizadas como -
- Operaçoes aritimeticas
- Operações de Comparação
- Operações Lógicas
- Operações bit a bit
Operaçoes aritimeticas
A tabela a seguir mostra todos os operadores aritméticos suportados pelo LISP. Assumir variávelA contém 10 e variável B detém 20 então -
Operador | Descrição | Exemplo |
---|---|---|
+ | Adiciona dois operandos | (+ AB) dará 30 |
- | Subtrai o segundo operando do primeiro | (- AB) dará -10 |
* | Multiplica ambos os operandos | (* AB) dará 200 |
/ | Divide numerador por de-numerador | (/ BA) dará 2 |
mod, rem | Operador de Módulo e o restante após uma divisão inteira | (mod BA) dará 0 |
incf | O operador de incrementos aumenta o valor inteiro pelo segundo argumento especificado | (incf A 3) dará 13 |
decf | Operador de decrementos diminui o valor inteiro pelo segundo argumento especificado | (decf A 4) dará 9 |
Operações de Comparação
A tabela a seguir mostra todos os operadores relacionais suportados pelo LISP que comparam entre números. No entanto, ao contrário dos operadores relacionais em outras linguagens, os operadores de comparação LISP podem ter mais de dois operandos e funcionam apenas com números.
Assumir variável A contém 10 e variável B contém 20, então -
Operador | Descrição | Exemplo |
---|---|---|
= | Verifica se os valores dos operandos são todos iguais ou não, se sim então a condição torna-se verdadeira. | (= AB) não é verdade. |
/ = | Verifica se os valores dos operandos são todos diferentes ou não, se os valores não são iguais a condição torna-se verdadeira. | (/ = AB) é verdadeiro. |
> | Verifica se os valores dos operandos estão diminuindo monotonicamente. | (> AB) não é verdade. |
< | Verifica se os valores dos operandos estão aumentando monotonicamente. | (<AB) é verdadeiro. |
> = | Verifica se o valor de algum operando à esquerda é maior ou igual ao valor do próximo operando à direita. Se sim, a condição se torna verdadeira. | (> = AB) não é verdade. |
<= | Verifica se o valor de algum operando esquerdo é menor ou igual ao valor de seu operando direito; em caso positivo, a condição se torna verdadeira. | (<= AB) é verdadeiro. |
max | Ele compara dois ou mais argumentos e retorna o valor máximo. | (AB máx.) retorna 20 |
min | Ele compara dois ou mais argumentos e retorna o valor mínimo. | (min AB) retorna 10 |
Operações lógicas em valores booleanos
O LISP comum fornece três operadores lógicos: and, or, e notque opera em valores booleanos. PresumirA tem valor nulo e B tem valor 5, então -
Operador | Descrição | Exemplo |
---|---|---|
e | Leva qualquer número de argumentos. Os argumentos são avaliados da esquerda para a direita. Se todos os argumentos forem avaliados como não nulo, o valor do último argumento será retornado. Caso contrário, nil é retornado. | (e AB) retornará NIL. |
ou | Leva qualquer número de argumentos. Os argumentos são avaliados da esquerda para a direita até que um seja avaliado como não nulo, nesse caso o valor do argumento é retornado, caso contrário ele retornanil. | (ou AB) retornará 5. |
não | Leva um argumento e retorna t se o argumento for avaliado como nil. | (não A) retornará T. |
Operações bit a bit em números
Operadores bit a bit trabalham em bits e executam operações bit a bit. As tabelas de verdade para operações bit a bit and, or, e xor são as seguintes -
p | q | p e q | p ou q | p xor q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
Assume if A = 60; and B = 13; now in binary format they will be as follows:
A = 0011 1100
B = 0000 1101
-----------------
A and B = 0000 1100
A or B = 0011 1101
A xor B = 0011 0001
not A = 1100 0011
Os operadores bit a bit suportados pelo LISP estão listados na tabela a seguir. Assumir variávelA detém 60 e variável B detém 13, então -
Operador | Descrição | Exemplo |
---|---|---|
logand | Isso retorna o AND lógico bit a bit de seus argumentos. Se nenhum argumento for fornecido, o resultado será -1, que é uma identidade para esta operação. | (log e ab)) dará 12 |
logior | Isso retorna o OR INCLUSIVE lógico bit a bit de seus argumentos. Se nenhum argumento for fornecido, o resultado será zero, que é uma identidade para esta operação. | (logior ab) dará 61 |
logxor | Isso retorna o OR EXCLUSIVO lógico bit a bit de seus argumentos. Se nenhum argumento for fornecido, o resultado será zero, que é uma identidade para esta operação. | (logxor ab) dará 49 |
Lognor | Isso retorna o NOT bit a bit de seus argumentos. Se nenhum argumento for fornecido, o resultado será -1, que é uma identidade para esta operação. | (lognor ab) dará -62, |
logeqv | Isso retorna a EQUIVALÊNCIA lógica bit a bit (também conhecida como nor exclusiva) de seus argumentos. Se nenhum argumento for fornecido, o resultado será -1, que é uma identidade para esta operação. | (logeqv ab) dará -50 |