LISP - Predicati
I predicati sono funzioni che testano i loro argomenti per alcune condizioni specifiche e restituiscono zero se la condizione è falsa o un valore diverso da zero se la condizione è vera.
La tabella seguente mostra alcuni dei predicati più comunemente usati:
| Sr.No. | Predicato e descrizione | 
|---|---|
| 1 | atom Accetta un argomento e restituisce t se l'argomento è un atomo o nullo in caso contrario. | 
| 2 | equal Richiede due argomenti e restituisce t se sono strutturalmente uguali o nil altrimenti. | 
| 3 | eq Richiede due argomenti e restituisce t se sono gli stessi oggetti identici, condividono la stessa posizione di memoria o nil altrimenti. | 
| 4 | eql Richiede due argomenti e restituisce t se gli argomenti sono eq, o se sono numeri dello stesso tipo con lo stesso valore, o se sono oggetti carattere che rappresentano lo stesso carattere, o nil altrimenti. | 
| 5 | evenp Accetta un argomento numerico e restituisce t se l'argomento è un numero pari o nil in caso contrario. | 
| 6 | oddp Accetta un argomento numerico e restituisce t se l'argomento è un numero dispari o nil in caso contrario. | 
| 7 | zerop Accetta un argomento numerico e restituisce t se l'argomento è zero o nil in caso contrario. | 
| 8 | null Richiede un argomento e restituisce t se l'argomento restituisce zero, altrimenti ritorna nil. | 
| 9 | listp Richiede un argomento e restituisce t se l'argomento restituisce una lista altrimenti ritorna nil. | 
| 10 | greaterp Richiede uno o più argomenti e restituisce t se è presente un solo argomento o gli argomenti sono successivamente più grandi da sinistra a destra, o nil in caso contrario. | 
| 11 | lessp Richiede uno o più argomenti e restituisce t se c'è un solo argomento o gli argomenti sono successivamente più piccoli da sinistra a destra, o nil in caso contrario. | 
| 12 | numberp Richiede un argomento e restituisce t se l'argomento è un numero o nil in caso contrario. | 
| 13 | symbolp Richiede un argomento e restituisce t se l'argomento è un simbolo altrimenti ritorna nil. | 
| 14 | integerp Richiede un argomento e restituisce t se l'argomento è un numero intero altrimenti restituisce nil. | 
| 15 | rationalp Richiede un argomento e restituisce t se l'argomento è un numero razionale, un rapporto o un numero, altrimenti restituisce nil. | 
| 16 | floatp Richiede un argomento e restituisce t se l'argomento è un numero in virgola mobile altrimenti restituisce nil. | 
| 17 | realp Richiede un argomento e restituisce t se l'argomento è un numero reale altrimenti restituisce nil. | 
| 18 | complexp Richiede un argomento e restituisce t se l'argomento è un numero complesso altrimenti restituisce nil. | 
| 19 | characterp Richiede un argomento e restituisce t se l'argomento è un carattere altrimenti ritorna nil. | 
| 20 | stringp Richiede un argomento e restituisce t se l'argomento è un oggetto stringa altrimenti restituisce nil. | 
| 21 | arrayp Richiede un argomento e restituisce t se l'argomento è un oggetto array, altrimenti restituisce nil. | 
| 22 | packagep Richiede un argomento e restituisce t se l'argomento è un pacchetto altrimenti ritorna nil. | 
Esempio 1
Crea un nuovo file di codice sorgente denominato main.lisp e digita il codice seguente.
(write (atom 'abcd))
(terpri)
(write (equal 'a 'b))
(terpri)
(write (evenp 10))
(terpri)
(write (evenp 7 ))
(terpri)
(write (oddp 7 ))
(terpri)
(write (zerop 0.0000000001))
(terpri)
(write (eq 3 3.0 ))
(terpri)
(write (equal 3 3.0 ))
(terpri)
(write (null nil ))Quando esegui il codice, restituisce il seguente risultato:
T
NIL
T
NIL
T
NIL
NIL
NIL
TEsempio 2
Crea un nuovo file di codice sorgente denominato main.lisp e digita il codice seguente.
(defun factorial (num)
   (cond ((zerop num) 1)
      (t ( * num (factorial (- num 1))))
   )
)
(setq n 6)
(format t "~% Factorial ~d is: ~d" n (factorial n))Quando esegui il codice, restituisce il seguente risultato:
Factorial 6 is: 720