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