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 -
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 -
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 -
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:
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 |