LISP - Operatori

Un operatore è un simbolo che dice al compilatore di eseguire manipolazioni matematiche o logiche specifiche. LISP consente numerose operazioni sui dati, supportate da varie funzioni, macro e altri costrutti.

Le operazioni consentite sui dati potrebbero essere classificate come:

  • Operazioni aritmetiche
  • Operazioni di confronto
  • Operazioni logiche
  • Operazioni bit per bit

Operazioni aritmetiche

La tabella seguente mostra tutti gli operatori aritmetici supportati da LISP. Assumi variabileA detiene 10 e variabile B detiene 20 quindi -

Show Examples

Operatore Descrizione Esempio
+ Aggiunge due operandi (+ AB) darà 30
- Sottrae il secondo operando dal primo (- AB) darà -10
* Moltiplica entrambi gli operandi (* AB) darà 200
/ Divide il numeratore per il de-numeratore (/ BA) darà 2
mod, rem Operatore modulo e resto di dopo una divisione intera (mod BA) darà 0
incf L'operatore Incrementa aumenta il valore intero in base al secondo argomento specificato (incf A 3) darà 13
decf L'operatore Decrementa diminuisce il valore intero del secondo argomento specificato (decf A 4) darà 9

Operazioni di confronto

La tabella seguente mostra tutti gli operatori relazionali supportati da LISP che confronta i numeri. Tuttavia, a differenza degli operatori relazionali in altre lingue, gli operatori di confronto LISP possono richiedere più di due operandi e funzionano solo sui numeri.

Assumi variabile A detiene 10 e variabile B detiene 20, quindi -

Show Examples

Operatore Descrizione Esempio
= Controlla se i valori degli operandi sono tutti uguali o meno, in caso affermativo la condizione diventa vera. (= AB) non è vero.
/ = Controlla se i valori degli operandi sono tutti diversi o meno, se i valori non sono uguali la condizione diventa vera. (/ = AB) è vero.
> Controlla se i valori degli operandi stanno diminuendo in modo monotono. (> AB) non è vero.
< Controlla se i valori degli operandi aumentano in modo monotono. (<AB) è vero.
> = Controlla se il valore di un qualsiasi operando sinistro è maggiore o uguale al valore dell'operando destro successivo, in caso affermativo la condizione diventa vera. (> = AB) non è vero.
<= Controlla se il valore di un qualsiasi operando sinistro è minore o uguale al valore del suo operando destro, in caso affermativo la condizione diventa vera. (<= AB) è vero.
max Confronta due o più argomenti e restituisce il valore massimo. (max AB) restituisce 20
min Confronta due o più argomenti e restituisce il valore minimo. (min AB) restituisce 10

Operazioni logiche su valori booleani

Common LISP fornisce tre operatori logici: and, or, e notche opera su valori booleani. AssumereA ha valore nullo e B ha valore 5, quindi -

Show Examples

Operatore Descrizione Esempio
e Richiede un numero qualsiasi di argomenti. Gli argomenti vengono valutati da sinistra a destra. Se tutti gli argomenti restituiscono un valore diverso da zero, viene restituito il valore dell'ultimo argomento. In caso contrario, viene restituito zero. (e AB) restituirà NIL.
o Richiede un numero qualsiasi di argomenti. Gli argomenti vengono valutati da sinistra a destra finché non si valuta un valore diverso da zero, in tal caso viene restituito il valore dell'argomento, altrimenti viene restituitonil. (o AB) restituirà 5.
non Richiede un argomento e restituisce t se l'argomento restituisce nil. (non A) restituirà T.

Operazioni bit per bit sui numeri

Gli operatori bit per bit lavorano sui bit ed eseguono operazioni bit per bit. Le tabelle di verità per le operazioni bit per bit and, or e xor sono le seguenti:

Show Examples

p q pe q p o q p xo 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

Gli operatori bit per bit supportati da LISP sono elencati nella tabella seguente. Assumi variabileA detiene 60 e variabile B tiene 13, quindi -

Operatore Descrizione Esempio
logand Questo restituisce l'AND logico bit-saggio dei suoi argomenti. Se non viene fornito alcun argomento, il risultato è -1, che è un'identità per questa operazione. (logand ab)) darà 12
logior Ciò restituisce l'OR INCLUSIVO logico bit-saggio dei suoi argomenti. Se non viene fornito alcun argomento, il risultato è zero, che è un'identità per questa operazione. (logior ab) darà 61
logxor Ciò restituisce l'OR ESCLUSIVO logico bit per bit dei suoi argomenti. Se non viene fornito alcun argomento, il risultato è zero, che è un'identità per questa operazione. (logxor ab) darà 49
lognor Questo restituisce il bit per bit NON dei suoi argomenti. Se non viene fornito alcun argomento, il risultato è -1, che è un'identità per questa operazione. (lognor ab) darà -62,
logeqv Ciò restituisce l'EQUIVALENZA logica bit per bit (nota anche come esclusiva nor) dei suoi argomenti. Se non viene fornito alcun argomento, il risultato è -1, che è un'identità per questa operazione. (logeqv ab) darà -50