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