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 -

Show Examples

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 -

Show Examples

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 -

Show Examples

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 -

Show Examples

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