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
T
Esempio 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