You are on page 1of 6

UNIVERSIDAD

NACIONAL DE
CHIMBORAZO
FACULTAD DE INGENIERIA EN SISTEMAS Y
COMPUTACION

Inteligencia artificial
Tema:

PREDICADOS PREDEFINIDOS

Ing. Alejandra pozo


Por:
Marco Guapi
Semestre:
Septimo A
RIOBAMBA-ECUADOR
2015

Predicados predefinidos
Los predicados predefinidos son aquellos que ya estn definidos en
PROLOG, que no necesitamos especificarlos mediante clusulas. Aunque
algunos predicados predefinidos ya han sido introducidos en los captulos
anteriores, daremos un repaso a los ms importantes en este captulo.
Existen bsicamente dos tipos de predicados predefinidos:

Aquellos predicados de uso frecuente que ya los proporciona


PROLOG, aunque podramos definirlos nosotros.

Los predicados se suelen escribir de dos formas, o bien seguidos de tantas


variables entre parntesis como argumentos tengan (por ejemplo,
predicado(X,Y,Z)), o bien con el nombre del predicado seguido de una barra
invertida / y del nmero de argumentos que utiliza (por ejemplo,
predicado/3), que es la aridad.

Predicados con un efecto colateral distinto a la instanciacin de


variables a valores (funcionamiento normal del PROLOG).

A continuacin se da una lista de aquellos predicados predefinidos que


son ms utilizados, clasificados segn su funcin.
Clasificacin de trminos
Este conjunto de predicados predefinidos permiten determinar el tipo de
trminos que estamos usando.
var/1: El objetivo var(X) se cumple si X es una variable no instanciada.
nonvar/1: El objetivo nonvar(X) se cumple si X es una variable instanciada.
atom/1: El objetivo atom(X) se cumple si X representa un tomo PROLOG.
integer/1: El objetivo integer(X) se cumple si X representa un nmero
entero.
atomic/1: El objetivo atomic(X) se cumple si X representa un entero o
un tomo.
Control de otros predicados
Los siguientes son predicados predefinidos que permiten controlar otros
predicados.
!/0 (cut): El smbolo de corte es un predicado predefinido que fuerza
al sistema PROLOG a mantener ciertas elecciones que ha realizado.
true/0: Este objetivo siempre se cumple.
fail/0: Este objetivo siempre fracasa.
not/1: Suponiendo que X est instanciada a un trmino que pueda
interpretarse como un objetivo. El objetivo not(X) se cumple si fracasa el
intento

de satisfacer X. El objetivo not(X) fracasa si el intento de satisfacer X tiene


xito.
repeat/0: El predicado predefinido repeat se da como una forma auxiliar
para generar soluciones mltiples mediante el mecanismo de reevaluacin.
call/1: Suponiendo que X est instanciada a un trmino que pueda
interpretarse como un objetivo. El objetivo call(X) se cumple si tiene
xito el intento de satisfacer X.
,/2: El funtor , especfica una conjuncin de objetivos.
;/2:El funtor ; especfica una disyuncin (es decir, una o lgica) de
objetivos.
Otros predicados predefinidos
atom_length(+Atom,?Length): Se satisface si length es la longitud del
tomo Atom.
concat_atom(+List,?Dest): Se satisface si Dest es la concatenacin de los
trminos atmicos que aparecen en la lista List.
concat_atoms(+Src1,+Src2,?Dest):
concatenacin de Src1 y Src2.

Se

satisfae

si

Dest

es

la

substring(+String1,+String2,?Posicion): Se satisface si String2 es una


sublista de String1 que comienza en la posicin.
append(?Lista1,?Lista2,?Lista3): Se satisface si Lista3 es el resultado de
aadir Lista2 a Lista1.
checklist(+Pred,+Lista): Se satisface si Pred(Elem) es verdad para cada
elemento de la lista Lista.
delete(?Elemento,?Lista1,?Lista2): Se satisface si Lista2 es Lista1 menos
una ocurrencia de Elemento en Lista1.
intersection(+Lista1,+Lista2,?Comun): Se satisface si Comn se unifica
con la lista que contiene los elementos en comn de las listas Lista1 y
Lista2.
length(?List,?N): Se satisface si la longitud de la lista Lista es N.
member(?Term,?Lista): Se satisface si el trmino Term unifica con un
miembro de la lista Lista.
nonmember(+Elem,+Lista): Se satisface si Elem no es un elemento de la
lista Lista.
subset(?Sublista,+Lista): Se satisface si Lista contiene
elementos de Sublista en el mismo orden que en Sublista.
subtract(+Lista1,+Lista2,?Resto): Se satisface
aquellos elementos de Lista1 que no estn en Lista2.

si

Resto

todos

los

contiene

union(+Lista1,+Lista2,?Union): Se satisface si Union es la lista que

contiene la unin de los elementos de Lista1 y de Lista2.

Ejemplo de uso de predicados predefinidos


El siguiente es un ejemplo de cmo se puede resolver un problema
representndolo como un grafo. Podemos representar un pequeo conjunto
de calles con una cuadrcula superpuesta en ellas como un grafo, y el
grafo representado como el siguiente conjunto de hechos en una base de
datos.

El significado es el siguiente: desde la esquina (1,1) se puede ir a


la esquina (2,1) y la esquina (1,2), por eso hay dos hechos en la
base de datos calle(1,1,2,1) y calle(1,1,1,2). Suponemos que los
arcos no representan direccin.
Para hacer una bsqueda primero en profundidad desde el nodo
(Sx,Sy) (esquina origen) al (Dx,Dy) (esquina destino) el programa
sera el siguiente:
ir([Salidax,Saliday],[Destinox,Destinoy],Ruta):ir0([Salidax,Saliday],[Destinox,Destinoy],
[],R),
inv(R,Ruta).
ir0([Dx,Dy],[Dx,Dy],T,[[Dx,Dy]|T]).
ir0([Sx,Sy],[Dx,Dy],T,R):nodolegal([Sx,Sy],T,[Sigx,Sigy]),
[[Sx,Sy]|T],R).
nodolegal([Sx,Sy],Camino,[Sigx,Sigy]):- (
calle(Sx,Sy,Sigx,Sigy)
;
calle(Sigx,Sigy,Sx,Sy)

ir0([Sigx,Sigy],[Dx,Dy],

),
not member([Sigx,Sigy],Camino).
La lista T se construye para comprobar que no pasamos dos
veces por el mismo sitio para evitar meternos en un bucle
infinito.
El predicado ir/3 encuentra una ruta, que no tiene que ser la
mejor,
y
puede
encontrar rutas alternativas mediante
reevaluacin.

Bibliografa:
https://files2.smallpdf.com/files/f0b0bba78df94a9e6af37af1d6fadd3
e.pdf.docx?name=Tema4.docx
Clocksin, W.F., Mellish, C.S., Programacin en PROLOG. Segunda edicin.
Coleccin Cincia Informtica. Editorial Gustavo Gili S.A., 1993.

P. Brisset et al., ECLiPSe 3.4 Extensions User Manual, EuropeanComputerIndustry


Research Center, Munich, Germany, 1994.