prolog-semana4

27

Upload: mel-tz

Post on 05-Aug-2015

19 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: prolog-semana4
Page 2: prolog-semana4

ProLog:Predicados predefinidos

Evelin Yasmyn Padilla SulcaEstudiante de Computacion Cientıfica

Universidad Nacional Mayor de San Marcosemail:[email protected]

5 de octubre de 2012

Page 3: prolog-semana4

Predicados predefinidos

El esquema condicional en PROLOG.

En PROLOG la “Y” logica corresponde a la “,” y la “O” logica ala definicion de varias clausulas para el mismo predicado.Equivalente a la definicion de varias clausulas para el mismopredicado es el uso del predicado predefinido “;”, tal y como vemosen los siguientes ejemplos.

Page 4: prolog-semana4

La notacion operador

PROLOG utiliza por defecto notacion prefija“+(x , ∗(y , z))” (queinternamente corresponde a una representacion en arbol. PROLOGpermite definir representaciones infijas utilizando la notacionoperador.PROLOG permite definir representaciones infijas utilizando lanotacion operador. Para definir operadores necesitaremosdeterminar su precedencia (que establece un orden de evaluaciondel operador), su posicion (infijo, prefijo o postfijo) y suasociatividad(cuando se combinan operadores de la mismaprecedencia).

Page 5: prolog-semana4

Un programador puede definir sus propios operadores. Por ejemplo,podemos definir los atomos es y contiene como operadores infijos yescribir hechos de la siguiente manera:

* juan es listo.

* el-jarron contiene flores.

Y esos hechos seran equivalentes a:es (juan ,listo).contiene (el-jarron, flores).

Page 6: prolog-semana4

Por ejemplo, el operador “:-“ se define como infijo con la maximaprecedencia:: −op(1200, xfx ,′ : −′).La precedencia va de 1 a 1200. La maxima precedenciacorresponde a los ultimos operadores que se evaluaran, es decir, losmas ”debiles”.La posicion vendra determinada en el segundo argumento por:

• Infijos: xfx, xfy, yfx

• Prefijos: fx, fy

• Postfijos: xf, yf

donde x e y se refieren a los argumentos y f al funtor o nombre depredicado declarado como operador.

Page 7: prolog-semana4

La asociatividad viene representada por los caracteres x e y . x serefiere a un argumento cuya precedencia es estrictamente menorque la precedencia del operador e y se refiere a un argumento cuyaprecedencia es menor o igual que la precedencia del operador.Por ejemplo, si la definicion del operador not es: :-op(500,fx,not).Entonces no podremos utilizar not not p, porque el argumento denot es de la misma precedencia que not y no estrictamente menor.Tendremos que hacer uso de parentesis, not(not p) o definir eloperador not como :-op(500,fy,not).

Page 8: prolog-semana4

Predicados predefinidos

Los predicados predefinidos son aquellos que ya estan definidos enPROLOG, que no necesitamos especificarlos mediante clausulas.Existen basicamente dos tipos de predicados predefinidos:

• Aquellos predicados de uso frecuente que ya los proporcionaPROLOG, aunque podrıamos definirlos nosotros.

• Predicados con un efecto colateral distinto a la instanciacion devariables a valores(funcionamiento normal del PROLOG).

A continuacion se da una lista de aquellos predicados predefinidosque son mas utilizados,clasificados segun su funcion.

Page 9: prolog-semana4

Clasificacion de terminos

Este conjunto de predicados predefinidos permiten determinar eltipo de terminos que estamos usando.

• var/1 El objetivo var(X) se cumple si X es una variable noinstanciada.

• novar/1 El objetivo novar(X) se cumple si X es una variableinstanciada.

• atom/1 El objetivo atom(X) se cumple si X representa un atomoPROLOG.

• integer/1 El objetivo integer(X) se cumple si X representa unnumero entero.

• atomic/1 El objetivo atomic(X) se cumple si X representa unentero o un atomo.

Page 10: prolog-semana4

Control de otros predicados

Los siguientes son predicados predefinidos que permiten controlarotros predicados.

• !/0 (cut) El sımbolo de “corte” es un predicado predefinido quefuerza al sistema PROLOG a mantener ciertas elecciones que harealizado.

• true/0 Este objetivo siempre se cumple.

• fail/0 Este objetivo siempre fracasa.

• not/1 Suponiendo que X esta instanciada a un termino quepueda interpretarse comoun objetivo. El objetivo not(X) secumple si fracasa el intento de satisfacer X. El objetivo not(X)fracasa si el intento de satisfacer X tiene exito.

Page 11: prolog-semana4

• repeat/0 El predicado predefinido repeat se da como una formaauxiliar para generar soluciones multiples mediante el mecanismode reevaluacion.

• call/1 Suponiendo que X esta instanciada a un termino quepueda interpretarse como un objetivo. El objetivo call(X) secumple si tiene exito el intento de satisfacer X.

• ,/2 El funtor “,” especıfica una conjuncion de objetivos.

• ;/2 El funtor “;” especıfica una disyuncion (es decir, una ologica) de objetivos.

Page 12: prolog-semana4

Introduccion de nuevas clausulas

• consult/1 El predicado predefinido consult esta pensado parasituaciones en las que se quiera anadir las clausulas existentes enun determinado fichero (o que se tecleen en el terminal) a las queya estan almacenadas en la base de datos. El argumento debe serun atomo que de el nombre del fichero del que se van a leer lasclausulas.

• reconsult/1 El predicado reconsult es similar a consult, exceptoque las clausulas leıdas sustituyen a todas las demas clausulasexistentes para el mismo predicado. (Muy util para corregirerrores de programacion)

Page 13: prolog-semana4

Construccion y acceso a componentes de estructuras

• arg/3 El predicado arg debe utilizarse siempre con sus dosprimeros argumentos instanciados. Se usa para acceder a undeterminado argumento de una estructura. El primer argumentode arg especifica que argumento se requiere. El segundo especificala estructura donde debe buscarse el argumento. PROLOGencuentra el argumento apropiado y entonces intenta hacerlocorresponder con el tercer argumento. Es decir, arg(N, E, A) secumple si el argumento numero N de la estructura E es A.

• functor/3 El predicado functor se define de tal manera quefunctor(E, F, N) significa que E es una estructura con funtor onombre de predicado F y aridad N.

Page 14: prolog-semana4

• name/2 El predicado name se usa para manejar atomosarbitrarios. El predicado name relaciona un atomo con la lista decaracteres (codigos ASCII) que lo constituyen. El objetivoname(A,L) significa que los caracteres del atomo A son losmiembros de la lista L.

• =../2 El predicado “=..” (pronunciado “univ” por razoneshistoricas) se utiliza para construir una estructura, dada una listade argumentos. El objetivo X=..L significa que L es la lista queconsiste en el funtor X seguido de los argumentos de X.Ej. append([a],[b],[a,b])=..L, L=[append,[a],[b],[a,b]]

Page 15: prolog-semana4

Supervision de PROLOG en su funcionamiento

• trace/0 El efecto de satisfacer el objetivo trace es activar unseguimiento exhaustivo. Esto significa que, a continuacion,podra verse cada uno de los objetivos generados por el programaen cada uno de los cuatro puertos principales.

• notrace/0 El efecto de satisfacer el objetivo notrace es desactivarun seguimiento exhaustivo. Sin embargo, los seguimientos debidosa la presencia de puntos espıa continuaran.

• spy/1 El predicado spy se utiliza cuando se quiere prestar especialatencion a objetivos que incluyan ciertos predicados especıficos.Esto se hace fijando en ellos puntos espıa. El predicado se definecomo operador prefijo, de forma que no hace falta poner elargumento entre parentesis. El argumento puede ser: un atomo,una estructura de la forma nombre/aridad o una lista.

Page 16: prolog-semana4

• debugging/0 El predicado predefinido debugging permite verque puntos espıa se han establecido hasta el momento. La lista depuntos espıa se escribe como efecto colateral al satisfacerse elobjetivo debugging.

• nodebug/0 El objetivo nodebug retira todos los puntos espıaactivos en ese momento.

• nospy/1 Como spy, nospy es un operador prefijo. nospy es masselectivo que nodebug, ya que puede especificar exactamenteque puntos espıa se quieren retirar.

Page 17: prolog-semana4

Lectura/escritura y manejo de ficheros

Lectura/escritura de terminos

• write/1 El objetivo write(X) escribe el termino X en el canal desalida activo. write solo se cumple una vez (no se puederesatisfacer).

• nl/0 Escribe una secuencia de control al canal de salida activoque genera una “nueva lınea”. nl solo se cumple una vez.

• read/1 El objetivo read(X) lee el siguiente termino del canal deentrada activo, y lo hace coincidir con X. read solo se cumple unavez. La entrada proporcionada desde teclado debe terminar con“.”.

• display/1 El predicado display funciona exactamente igual quewrite, excepto que pasa por alto las declaraciones de operadores.

Page 18: prolog-semana4

Lectura/escritura de caracteres

• put/1 Este objetivo escribe el entero X como caracter en el canalde salida activo. put solo se cumple una vez. Si X noesta instanciada, se produce un error.

• get/1 Este objetivo se cumple si X puede hacerse correspondercon el siguiente caracter imprimible encontrado en el canal deentrada activo. get solo se cumple una vez.

• get0/1 Este objetivo se cumple si X puede hacerse correspondercon el siguiente caracter encontrado en el canal de entrada activo.get0 solo se cumple una vez.

Page 19: prolog-semana4

Lectura /escritura en ficheros

• tell/1 El objetivo tell(X) abre el fichero X si no estaba abierto, ydefine el fichero X como canal de salida activo. Si X noesta instanciada se produce un error. La primera vez que se utilizatell sobre un fichero no existente, se crea un fichero con esenombre. Si se utiliza tell con un fichero ya existente, el contenidode dicho fichero se destruye.

• telling/1 Este objetivo se cumple si X coincide con el nombre delcanal de salida activo, fracasando en caso contrario.

• told/1 Este objetivo cierra el canal de salida activo, haciendo quese escriba una marca de fin-de-fichero al final del fichero. Elnuevo canal de salida activo pasa a ser la pantalla del ordenadordel usuario.

Page 20: prolog-semana4

• see/1 El objetivo see(X) abre el fichero X, si todavıa noesta abierto, y define al canal de entrada activo de tal forma quesu origen sea el fichero X. Si X no esta instanciada, o su nombrecorresponde a un fichero que no existe, se produce un error.

• seeing/1 Este objetivo se cumple si el nombre del canal deentrada activo coincide con X, fracasando en caso contrario.

• seen/1 Este objetivo cierra el canal de entrada activo, asignandoel nuevo canal de entrada activo al teclado del ordenador delusuario.

Page 21: prolog-semana4

Manipulacion de Bases de Datos

Anadir clausulas a la BD.

• assert/1 Anade clausulas al final del conjunto de clausulas en laBD que tienen el mismo nombre de predicado.

• asserta/1 Anade clausula al principio del conjunto de clausulasque tienen el mismo nombre de predicado.

Page 22: prolog-semana4

Borrar clausulas de la BD.

• retract/1 Borra una clausula de la BD. Haciendo backtrackingpodremos borrar todas las clausulas y con cada una de ellasefectuar las operaciones que nos interesen.

• retract-all/1 Borra todas las clausulas de la BD con el nombre yaridad que aparece en el argumento. Estas formas de anadir yborrar son logicas, es decir, no se almacenan fısicamente enninguna base de datos.

Page 23: prolog-semana4

Visualizar clausulas de la BD.

• findall/3 Busca en la base de datos todas las ocurrencias determino (primer argumento) que satisfacen el objetivo (incluidoen el segundo argumento) y devuelve todas las instancias en unalista (tercer argumento) desordenada.

Page 24: prolog-semana4

Otros predicados predefinidos

• atom-length(+Atom,?Length) Se satisface si length es lalongitud del atomo Atom.

• concat-atom(+List,?Dest) Se satisface si Dest es laconcatenacion de los terminos atomicos que aparecen en la listaList.

• concat-atoms(+Src1,+Src2,?Dest) Se satisfae si Dest es laconcatenacion de Src1 y Src2.

• Substring(+String1,+String2,?Posicion) Se satisface siString2 es una sublista de String1 que comienza en la posicionPosicion.

• append(?Lista1,?Lista2,?Lista3) Se satisface si Lista3 es elresultado de anadir Lista2 a Lista1

Page 25: prolog-semana4

• checklist(+Pred,+Lista) Se satisface si Pred(Elem) es verdadpara cada elemento de la lista Lista.

• delete(?Elemento,?Lista1,?Lista2) Se satisface si Lista2 esLista1 menos una ocurrencia de Elemento en Lista1.

• intersection(+Lista1,+Lista2,?Comun) Se satisface si Comunse unifica con la lista que contiene los elementos en comun de laslistas Lista1 y Lista2.

• length(?List,?N) Se satisface si la longitud de la lista Lista es N.

• member(?Term,?Lista) Se satisface si el termino Term unificacon un miembro de la lista Lista.

Page 26: prolog-semana4

• nonmember(+Elem,+Lista) Se satisface si Elem no es unelemento de la lista Lista.

• subset(?Sublista,+Lista) Se satisface si Lista contiene todos loselementos de Sublista en el mismo orden que en Sublista.

• substract(+Lista1,+Lista2,?Resto) Se satisface si Restocontiene aquellos elementos de Lista1 que no estan en Lista2.

• union(+Lista1,+Lista2,?Union) Se satisface si Union es la listaque contiene la union de los elementos de Lista1 y de Lista2.

Page 27: prolog-semana4

GRACIAS!!!