martes, 16 de abril de 2013

Sintaxis de Prolog

Existen varios tipos de datos en prolog los cuales son:




Los datos Atomos se pueden expresar de tres maneras

  • 1). Son de la forma cadenas de letras, dígitos y de símbolos, como subrayado, pero comenzando siempre con una letra minúscula, es importante esto.

  • 2). Son cadenas de caracteres especiales.
               Ejemplos: <---> ===> ... .:. ::=

  • 3). Son cadenas de caracteres encerrados en comillas simples (').
               Ejemplos: 'Tomas' 'Juan_Hernandez' 'Jose Lopez Lopez'

Números. Pueden ser enteros ó reale, creo que no es necesario dar ejemplos.

Variables. Es de la primera forma de Atomo solo cambia en que siempre comienza con la letra mayuscula.

Estructuras. Los datos estructurados son en Prolog son datos compuestos, es decir, se componen de los ya antes mencionados, claro con cierta relacione entre ellos,  un ejemplo es una  fecha de nacimiento pues cuenta con varios datos como numeros y atomos.

Todos los objetos estructurados se pueden interpretar como árboles donde el functor es la raíz del árbol y sus componentes son las hojas del árbol. Si un componente es a su vez una estructura, entonces será un subárbol del árbol inicial. Se muestran varios ejemplos.

lunes, 1 de abril de 2013

Resumen capitulo 1 PROLOG

Prolog  es una forma de programacion lógica también conocido como lenguaje delcarativo que se basa en usar cláusulas, estás son relaciones de uno o dos argumentos, ejemplos:

mujer(ana). es una relación con un argumento y se lee como ana es mujer.
padre(alberto, jesus). es una relación con dos argumentos y se lee como alberto es padre de jesús. 

Ahora veamos los tres tipos de cláusulas 
  • Hechos (Son relaciones ciertamente ciertas), se componen de cabeza de la cláusula y cuerpo de la cláusula
  • Reglas (Son relaciones con alguna o algunas condiciones ).
  • Preguntas (Como su nombre lo dice, son preguntas que se le puede hacer en prolog).
 Ya entendiento que en Prolog podemos programar en swi-prolog lo que hacemos es introducir los datos del programa, compilar y preguntar. Asi sabemos si el programa tiene errores o los marca.

Conjuncion de cláusulas es la forma de relacionar a terceros argumentos en ella haciendo doble consulta o pregunta, el ejemplo que viene es sobre la pregunta relacion 'Abuelo' se quiere saber quien es el abuelo de las personas que se encuentran en el arbol familiar. Bueno la respuesta para ello es hacer dos preguntas al programa, preguntemos por culaquier abuelo en general sabiendo que este es un ejemplo claro.

1) ¿Quién es el progenitor de jaime?, asumimos que es algun Y.
2) ¿Quién es el progenitor de Y?, ausmimos que es algun X.

entonces en Prolog hacemos la siguiente pregunta.

?- progenitor(Y,jaime), progenitor(X,Y). "Con esto sabremos quién es abuelo"

Nota: La coma(,) indica la conjuncion.

Las reglas en prolog son clausulas que no solo constan de hechos, sino que existe una condicion para que se pueda cumplir, dada la condición, esta puede estar en conjuncion con otra y asi deberan cumplirse para obtener un resultado final.

Regla recursiva es una técnica que debe ser tenida en cuanta cuando se quiere programar en Prolog. Se basa en definir relaciones en términos de ellas mismas.


Una pregunta a Prolog siempre es una secuencia de una o más metas, para responder a una pregunta prolog trata de satisfacer todas las metas, satisfacer una meta significa demostrar que la meta se sigue lógicamente de los hechos y las reglas del programa y por lo consiguiente estas metas tienen que ser verdaderas.

Si la pregunta contiene variables, prolog intentará encontrar los objetos particulares o los hechos que ya son verdaderos y las sustituye por las variables, asi las metas puedan ser satisfechas. 


Si Prolog no puede demostrar que las metas se siguen lógicamente del programa su respuesta final será "no".

Significado Declarativo es la forma en la que se muestra el resultado del programa en prolog sin ningun procedimiento pues prolog cuenta con las piezas necesarias para dar con la respuesta.
Significado Procedural es el procediemiento para encontrar la respuesta y asi mostrarla al usuario.

domingo, 3 de marzo de 2013

Ejercicios 1.7

Link para ver la tarea...

Ejercicios 1.7 ¿Cómo hace las preguntas Prolog?

Ejercicios 1

Vamos a Realizar los ejercicios que se encuentran en el archivo  Prolog estos temas a tratar son del curso que llevamos sobre Programación Lógica.

Los primeros ejercicios son:
  
1. Asumiendo las relaciones definidas en el ejemplo, ¿qué contestará Prolog a las
siguientes preguntas?



Primero que nada sabemos que para que este nos funciones debemos declarar las clausalas para estos ejercicios es suficiente con declarar las clausulas de progenitor.



 Ahora le hacemos la pregunta y el resultado es false.

a). ?- progenitor( jaime, X).
b). ?- progenitor( X, jaime).
c). ?- progenitor( pamela, X), progenitor( X, patricia).
d). ?- progenitor( pamela, X), progenitor( X, Y), progenitor(Y,jaime).


Bueno para no meter tantas imagenes solo saco una haciendo las  cuatro consultas requeridas.

2. Formule en Prolog las siguientes preguntas acerca de la relación progenitor:
a). ¿ cómo se llama el progenitor de patricia ?


      ?- progenitor(X,patricia).

b). ¿ tiene elizabeth algún hijo ?



      ?- progrenitor(elizabeth,X).

c). ¿ cómo se llama el abuelo de patricia ?


     ?- progenitor(roberto,patricia), progenitor(X,roberto).



Segundos ejercicios.

1.3. Traduzca las siguientes sentencias a reglas Prolog.

a). Cualquiera que tiene un hijo es feliz (introduzca la relación unaria llamada 'feliz').


Para todo X y Y
X es feliz, si X es progenitor de Y.

en Prolog:

feliz(X):- progenitor(X,Y).

Añadimos la clausula feliz.


Después hacemos la pregunta de quienes son felices.



Las veces que se repiten los nombres son la cantidad de hijos que tienen.

b). Para todo X, si X tiene un hijo que tiene una hermana, entonces X tiene dos hijos
(introduzca la relación tiene-dos-hijos).



Para todo X y Y.
X progenitor de Y, Y hermana de Z,
entonces X tiene dos hijos.

en prolog:
tiene-dos-hijos(X):- progenitor(X,Y), progenitor(X,Z).

 Añadimos la clausula tiene-dos-hijos

1.4. Defina la relación 'nieto' usando la relación 'progenitor'.

Para todo X,Y,Z.
Z es progenitor de Y, Y es progenitor X,
entonces X es nieto de Z.

En prolog:
nieto(X,Z):- progenitor(Z,Y), progenitor(Y,X).


 
Recomendación: Será similar a la relación abuelo.




 

1.5. Defina la relación tia( X, Y) en términos de las relaciones 'progenitor' y
'hermana'. Dibuje primero un diagrama para ésta relación.


Para todo X,Y
X es tia de Y, si X es hermana de Z,
Z es progenitor de Y y X es mujer.

En prolog:

tia(X,Y):- hernana(X,Z), progenitor(Z,Y), mujer(X).


Ahora la pregunta.



1.6. Considere la siguiente definición alternativa de predecesor:

Este ejercicio se sigue de

Primera regla.
Para todo X y Z,
X es predecesor de Z si
X es progenitor de Z.


en Prolog:
predecesor( X, Z) :- progenitor( X, Z).


Segunda regla.

Para todo X y Z,
X es predecesor de Z si
existe algun Y tal que
(1) X es progenitor de Y y
(2) Y es predecesor de Z.


en Prolog :
predecesor( X, Z) :- progenitor( X, Y) ,
predecesor( Y, Z).


 Ahora queremos saber si

(Primera regla)  predecesor( X, Z) :- progenitor( X, Z).
(Segunda regla) predecesor( X, Z) :- progenitor( Y, Z) , predecesor( X, Y).


¿Es apropiada esta definición?

Añadimos primera y segunda regla.



Respuesta: Si



¿Puede usted dibujar un diagrama que corresponda con
esta definición?


Primero si X es predecesor de Z es verdadero, por lo consiguiente X es progenitor de Z.
Segundo Y es progenitor de Z, entonces Y es predecesor de Z.
Tercero X es predecesor de Y, entonces X es progenitor de Y.

Por lo tanto existe la relacion de que X es predecesor de Z, pero no es progenitor de Z. es como si existiera la relacion padre y abuelo donde ellos son los predecesores.



Material de apoyo Programación Lógica (Prolog)

Para aquellos que no cuentan con el material.
Tenemos tres pdf que podiras consultar.

Link de descarga:

-Prolog
-El lenguaje de programación Prolog de M. Teresa Escrig
-Temas Programacion Logica IA 

miércoles, 27 de febrero de 2013

Reto de la semana Arbol Genealógico

/* borraPantalla <- borra="" br="" la="" pantalla="">borraPantalla :- borraLinea(25).
borraLinea(1) :- !,nl.
borraLinea(N) :- nl,N1 is N-1,borraLinea(N1).

?-borraPantalla.

hombre(felipe).
hombre(rodrigo).
hombre(genaro).
hombre(jesus).
hombre(jorge).
hombre(erick).
hombre(antonio).
hombre(yoltzin).
hombre(milton).
hombre(alejandro).

mujer(isabel).
mujer(pina).
mujer(margarita).
mujer(isabel2).
mujer(mariluz).
mujer(maricruz).
mujer(orquidea).
mujer(diana).
mujer(alondra).
mujer(marlen).
mujer(yunnuen).
mujer(yoshandi).

padre(felipe,margarita).
padre(roberto,genaro).
padre(genaro,isabel2).
padre(genaro,jesus).
padre(genaro,mariluz).
padre(genaro,maricruz).
padre(genaro,alejandro).
padre(jesus,antonio).
padre(jesus,diana).
padre(jesus,alondra).

madre(isabel,margarita).
madre(pina,genaro).
madre(margarita,isabel2).
madre(margarita,jesus).
madre(margarita,mariluz).
madre(margarita,maricruz).
madre(margarita,alejandro).
madre(isabel2,orquidea).
madre(isabel2,jorge).
madre(isabel2,erick).
madre(mariluz,yoltzin).
madre(mariluz,milton).
madre(maricruz,marlen).
madre(maricruz,yunnuen).
madre(maricruz,yoshandy).

todalafamilia(X):- hombre(X); mujer(X).
matrimonio(X,Y):- padre(X,Z), madre(Y,Z).
hijo_o_hija(X,Y):- padre(Y,X); madre(Y,X).
hermanos(X,Y):-madre(Z,X),madre(Z,Y).
hermano(X,Y):-hombre(X),hombre(Y),hermanos(Y,X).
hermana(X,Y):- mujer(X),mujer(Y), hermanos(X,Y).

tio_o_tia(X,Y):- hijo_o_hija(Y,Z),hermanos(X,Z).


jueves, 21 de febrero de 2013

Empezando el curso Prolog



Bueno para empezar ¿qué es Prolog?, prolog es el nombre que se le fue asignado a la programacion lógica, esta programacion empieza más o menos en los 70's por por Alain Colmerauer, esta basada en la logica matemática, la forma de como solucionar problemas en prolog es muy diferente a las otras formas de programar ya que es solo declartativa que quiero decir con esto que vamos a darle al programa las bases para que el trabaje por si solo, declaramos unas lineas y despues hacemos un par de preguntas.
 
El lenguaje Prolog tiene un mecanismo no muy complejo, podemos desarrollarlo en una hoja de texto y despues compilarlo para eso utilizaremos el programa swi-prolog que se puede descargar de la pagina http://www.swi-prolog.org/ debemos tomar en cuenta el  tipo de sistemal operativo al cual es compatible. 
 
Pero una de las cosas importantes para lograr un funcionamineto correcto en  Prolog es tomar en cuenta que las clausulas deben tener una secuencia de tres tipos:

a).- Hechos, declaran las cosas que son incondicionalmente ciertas.

Al parecer son las llamadas unarias un ejemplo de ello es:

padre(alejandro).   "Esta es la forma declarativa en prolog. Es cierta pues la relacion padre definitivamente solo involucra a alejandro".

b).- Reglas, especifican qué cosas se pueden deducir, si es que se cumplen ciertas
condiciones.
c).- Preguntas, permiten que el usuario pida alguna información derivable de los hechos y
las reglas del programa.

Seguidores