290 likes | 557 Views
Introdución a PROLOG. Jorge Cabrera Gámez Departamento de Informática y Sistemas Universidad de Las Palmas de Gran Canaria. ¿Qué es Prolog?. Prolog = PROgramming in LOGic. Desarrollado a partir de trabajos en demostración automática de teoremas
E N D
Introdución a PROLOG Jorge Cabrera Gámez Departamento de Informática y Sistemas Universidad de Las Palmas de Gran Canaria Prolog
¿Qué es Prolog? • Prolog = PROgramming in LOGic. • Desarrollado a partir de trabajos en demostración automática de teoremas • Aplicado inicialmente en problemas de Procesamiento del Lenguaje Natural • Permite un prototipado más rápido que con muchos lenguajes porque es mucho más proximo a la especificación lógica del programa. Prolog
¿Qué es Prolog? Lenguaje de Programación Computación simbólica y no-numérica Para resolver problemas que involucran • OBJETOS • RELACIONES Prolog
Para programar en Prolog: Declarar hechossobre objetos y sus relaciones Declarar reglas sobre los objetos y sus relaciones Hacer preguntas sobre los objetos y sus relaciones Prolog
Hechos “Raquel es hija de teresa” hija ( raquel, teresa). Objetos: raquel, teresa. Relación: hija • Observar: • Minúsculas • El punto final Prolog
pedro maria Ejemplo: progenitor (pedro, teresa). progenitor (maria, teresa). progenitor (maria, elena). progenitor (teresa, jorge). progenitor (teresa, raquel). progenitor (raquel, miguel). teresa elena jorge raquel miguel cláusulas Prolog
pedro maria ?- progenitor (teresa, raquel). Yes ?- progenitor (jorge, miguel). No teresa elena ?- progenitor (X, raquel). X = teresa ; No jorge raquel ?- progenitor (teresa, Y). Y = jorge ; Y = raquel ; No miguel Prolog
pedro maria ?- progenitor (X, Y). X = pedro Y = teresa ; X = maria Y = teresa ; X = maria Y = elena ; X = teresa Y = jorge ; X = teresa Y = raquel ; X = raquel Y = miguel ; No teresa elena jorge raquel miguel Prolog
pedro maria ¿Quién es abuelo de jorge? ?- progenitor (PoM, jorge), progenitor (Abuelo, PoM). PoM = teresa Abuelo = pedro ; PoM = teresa Abuelo = maria ; No teresa elena jorge raquel miguel Prolog
pedro maria ¿Quién es nieto de pedro? ?- progenitor (pedro, Hijo), progenitor (Hijo, Nieto). Hijo = teresa Nieto = jorge ; Hijo = teresa Nieto = raquel ; No teresa elena jorge raquel miguel Prolog
pedro maria ¿Quién es abuelo de jorge? ?- progenitor (X, jorge), progenitor (Y, X). X = teresa Y = pedro ; X = teresa Y = maria ; No teresa elena jorge raquel miguel Prolog
Paso 1. ¿Quién es abuelo de jorge? ?- progenitor (X, jorge), progenitor (Y, X). progenitor (Y, teresa). progenitor (pedro, teresa). progenitor (maria, teresa). progenitor (maria, elena). progenitor (teresa, jorge). progenitor (teresa, raquel). progenitor (raquel, miguel). X = teresa La base de hechos Prolog
Paso 2. ¿Quién es abuelo de jorge? ?- progenitor (X, jorge), progenitor (Y, teresa). Y = pedro progenitor (pedro, teresa). progenitor (maria, teresa). progenitor (maria, elena). progenitor (teresa, jorge). progenitor (teresa, raquel). progenitor (raquel, miguel). Respuesta X = teresa, Y = pedro La base de hechos Prolog
Paso 3. ¿Quién es abuelo de jorge? ?- progenitor (X, jorge), progenitor (Y, teresa). progenitor (pedro, teresa). progenitor (maria, teresa). progenitor (maria, elena). progenitor (teresa, jorge). progenitor (teresa, raquel). progenitor (raquel, miguel). Y = maria Respuesta X = teresa, Y = maria La base de hechos Prolog
Paso 4. ¿Quién es abuelo de jorge? ?- progenitor (X, jorge), progenitor (X, jorge), progenitor (Y, teresa). progenitor (Y, X). progenitor (pedro, teresa). progenitor (maria, teresa). progenitor (maria, elena). progenitor (teresa, jorge). progenitor (teresa, raquel). progenitor (raquel, miguel). Backtrack La base de hechos Prolog
Aquí Paso 5. ¿Quién es abuelo de jorge? ?- progenitor (X, jorge), progenitor (Y, X). progenitor (pedro, teresa). progenitor (maria, teresa). progenitor (maria, elena). progenitor (teresa, jorge). progenitor (teresa, raquel). progenitor (raquel, miguel). No La base de hechos Prolog
Reglas X Para todos X e Y, X es descendiente de Y SI Y es progenitor de X. progenitor descendiente Y descendiente(X,Y) :- progenitor(Y,X). cabeza cuerpo Para todos X e Y, SI Y es progenitor de X Entonces X es descendiente de Y. Prolog
Ejemplo: la relación madre Para todos X y W, X es madrede W SI X es progenitor de W Y X es mujer X mujer madre progenitor W madre (X, W) :- progenitor(X, W), mujer(X). La coma significa conjunción (Y) Relación unaria Prolog
Ejemplo: la relación abuelo X Para todos X y Z, X es abuelode Z SI X es progenitor de W y W es progenitor de Z y X es hombre hombre progenitor W abuelo abuelo (X, Z) :- progenitor (X, W), progenitor (W, Z), hombre (X). progenitor Z Prolog
Ejemplo: la relación hermana Z Para todos X y W, X es hermanade W SI Z es progenitor de X y W, y X es mujer progenitor progenitor X W hermana mujer hermana (X, W) :- progenitor(Z, X), progenitor(Z, W), mujer(X). Prolog
pedro maria Añadimos estos hechos. hombre(pedro). mujer(maria). mujer(elena). mujer(teresa). hombre(jorge). mujer(raquel). hombre(miguel). teresa elena jorge raquel ¿Quién es hermana de jorge? ?- hermana(X, jorge). X = raquel ; No miguel Prolog
pedro maria Un pequeño problema ... ¿Quién es hermana de teresa? ?- hermana(X, teresa). X = teresa ; X = teresa ; X = elena ; No teresa elena jorge raquel miguel Prolog
pedro maria Programa: progenitor(pedro, teresa). progenitor(maria, teresa). progenitor(maria, elena). progenitor(teresa, jorge). progenitor(teresa, raquel). progenitor(raquel, miguel). hombre(pedro). mujer(maria). mujer(elena). mujer(teresa). hombre(jorge). mujer(raquel). hombre(miguel). hermana(X, W) :- progenitor(Z, X), progenitor(Z, W), mujer(X). teresa elena jorge raquel miguel Prolog ¿Sería más eficiente intercambiar el orden de los dos predicados progenitor/2 en la definición de hermana/2 ?
X Ejemplo: la relación antepasado Para todos X y Z, X es antepasadode Z SI X es progenitor de W y W es antepasado de Z y progenitor antepasado W antepasado (X, Z) :- progenitor (X, W), antepasado (W, Z). antepasado ... Una definición recursiva Z Prolog
X Ejemplo: la relación antepasado ?- antepasado(X, jorge). No progenitor antepasado W antepasado (X, Z) :- progenitor (X, W), antepasado (W, Z). antepasado ... Z Prolog
X Ejemplo: la relación antepasado ?- antepasado(X, jorge). X = teresa ; X = pedro ; X = maria ; No progenitor antepasado W antepasado(X, Z) :- progenitor(X, Z). antepasado antepasado (X, Z) :- progenitor (X, W), antepasado (W, Z). ... Z Prolog
Sumario • Declarar hechos relativos a objetos • Plantear preguntas sobre los hechos • Utilizar variables • Utilizar la conjunción • Definir relaciones mediante reglas • Un rápido vistazo al mecanismo de backtracking Prolog
pedro maria Ejercicio Definir las relaciones tia, tio, sobrino, sobrina, primos, ... y ensayarla sobre la base de datos de la figura teresa elena juan jorge raquel jose miguel SWI-Prolog Prolog