LISP - Predicados
Los predicados son funciones que prueban sus argumentos para algunas condiciones específicas y devuelven nil si la condición es falsa, o algún valor no nulo si la condición es verdadera.
La siguiente tabla muestra algunos de los predicados más utilizados:
No Señor. | Predicado y descripción |
---|---|
1 | atom Toma un argumento y devuelve t si el argumento es un átomo o nil en caso contrario. |
2 | equal Toma dos argumentos y devuelve t si son estructuralmente iguales o nil de otra manera. |
3 | eq Toma dos argumentos y devuelve t si son los mismos objetos idénticos, compartiendo la misma ubicación de memoria o nil de otra manera. |
4 | eql Toma dos argumentos y devuelve t si los argumentos son eq, o si son números del mismo tipo con el mismo valor, o si son objetos de carácter que representan el mismo carácter, o nil de otra manera. |
5 | evenp Toma un argumento numérico y devuelve t si el argumento es un número par o nil si no. |
6 | oddp Toma un argumento numérico y devuelve t si el argumento es un número impar o nil si no. |
7 | zerop Toma un argumento numérico y devuelve t si el argumento es cero o nil si no. |
8 | null Toma un argumento y regresa t si el argumento se evalúa como nulo, de lo contrario devuelve nil. |
9 | listp Toma un argumento y regresa t si el argumento se evalúa como una lista, de lo contrario, devuelve nil. |
10 | greaterp Toma uno o más argumentos y regresa t si hay un solo argumento o los argumentos son sucesivamente más grandes de izquierda a derecha, o nil si no. |
11 | lessp Toma uno o más argumentos y regresa t si hay un solo argumento o los argumentos son sucesivamente más pequeños de izquierda a derecha, o nil si no. |
12 | numberp Toma un argumento y regresa t si el argumento es un número o nil si no. |
13 | symbolp Toma un argumento y regresa t si el argumento es un símbolo, de lo contrario, devuelve nil. |
14 | integerp Toma un argumento y regresa t si el argumento es un número entero, de lo contrario, devuelve nil. |
15 | rationalp Toma un argumento y regresa t si el argumento es un número racional, ya sea una razón o un número, de lo contrario devuelve nil. |
dieciséis | floatp Toma un argumento y regresa t si el argumento es un número de punto flotante, de lo contrario, devuelve nil. |
17 | realp Toma un argumento y regresa t si el argumento es un número real, de lo contrario, devuelve nil. |
18 | complexp Toma un argumento y regresa t si el argumento es un número complejo, de lo contrario, devuelve nil. |
19 | characterp Toma un argumento y regresa t si el argumento es un carácter, de lo contrario, regresa nil. |
20 | stringp Toma un argumento y regresa t si el argumento es un objeto de cadena de lo contrario, devuelve nil. |
21 | arrayp Toma un argumento y regresa t si el argumento es un objeto de matriz, de lo contrario, devuelve nil. |
22 | packagep Toma un argumento y regresa t si el argumento es un paquete, de lo contrario, regresa nil. |
Ejemplo 1
Cree un nuevo archivo de código fuente llamado main.lisp y escriba el siguiente código en él.
(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 ))
Cuando ejecuta el código, devuelve el siguiente resultado:
T
NIL
T
NIL
T
NIL
NIL
NIL
T
Ejemplo 2
Cree un nuevo archivo de código fuente llamado main.lisp y escriba el siguiente código en él.
(defun factorial (num)
(cond ((zerop num) 1)
(t ( * num (factorial (- num 1))))
)
)
(setq n 6)
(format t "~% Factorial ~d is: ~d" n (factorial n))
Cuando ejecuta el código, devuelve el siguiente resultado:
Factorial 6 is: 720