sábado, 14 de junio de 2014

CAPITULO 3: SEGUNDA PARTE-ARITMETICA


 ARITMETICA 

 Definicion de la sucesión de Fibonacci

 



Leonardo de Pisa, más conocido como Fibonacci, construyó por primera vez la sucesión que lleva su nombre: 


1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765..., 



Cada término a partir del tercero, se obtiene sumando los dos anteriores.
El cociente entre dos términos consecutivos de la sucesión de Fibonacci se aproxima al número de oro (f = 1,618...).
Los números consecutivos de Fibonacci son primos entre si.


Definimos el codigo que nos servirá para mostrarle como funciona la sucesión de Fobonacci 




Muestra como como se consulta en prolog la suceción.







Bibliografia:
APUNTES DE PROLOG
Edgar Altamirano Carmona    
Universisda Autónoma De Guerrero, 2014





UNIDAD 3: LISTAS, OPERADORES Y ARITMETICA

LISTAS

 

Las listas son otro recurso sintáctico para representar objetos estructurados. Una lista es una secuencia ordenada de términos (que pueden, a su vez, ser listas). Por ejemplo, [A1, A2, A3] es una lista de variables, y [a1, a2, a3] una lista de constantes. Obsérvese que una función se define siempre con un grado asociado, pero una lista puede tener cualquier número de elementos. La lista puede ser vacía: []. Si no es vacía, se puede considerar formada por una cabeza (primer o primeros elementos de la lista) y una cola (lista formada por el resto de los elementos) unidas por la función de construcción de listas, «cons» . Así, la lista del caso anterior puede escribirse de las siguientes maneras:
 
 
    [a1, a2, a3] = cons(a1, [a2, a3]) = cons(a1, cons(a2,[a3]))  
                  = cons(a1, cons(a2, cons(a3, []))) 
 
 
Un ejemplo de agregar y remover en una lista es el 
siguente:
 
 
 
 
 
Codig de una lista, nos sirve para agregar y remover.














Muestro una consulta para agregar  en este caso "z".














 Se muestra que se remueve la "z" en este ejemplo.

















En este caso se elimina la "z" y "L"

miércoles, 4 de junio de 2014

PRACTICANDO CON PROLOG UNIDAD DOS: TERCERA PARTE

UNIDAD DOS: SINTEXIS Y SIGNIFICADO DE LOS PROGRAMAS


El problema del mono y la banana.



El problema del mono y la banana se utiliza como un ejemplo sencillo de solución de problemas. El siguiente programa en Prolog mostrará como se pueden utilizar los mecanismos de 'matching' y 'backtracking'. Utilizaremos la siguiente versión del problema: Existe un mono en la puerta de un cuarto; enmedio del cuarto cuelga una banana del techo; el mono está hambriento y desea capturar la banana, pero no puede alcanzarla desde el piso. En la ventana del cuarto hay una caja que el mono puede usar.

El mono puede realizar solamente las siguientes acciones: caminar sobre el piso, subir a
la caja, empujar la caja (si el mono está junto a la caja), y, agarrar la banana (si el mono
está sobre la caja y bajo la banana).
¿Cómo puede el mono llegar a capturar la banana?

Análisis del problema.
Una tarea importante en programación es encontrar una representación del problema en
términos del lenguaje de programación utilizado.
En este caso podemos pensar del 'mundo del mono' en términos de 'estados' que
cambian con el tiempo. El estado actual se determina por la posición actual de los
objetos.

Por ejemplo, el estado inicial del mundo está determinado por:
1). El mono está en la puerta.
2). El mono está sobre el piso.
3). La caja está en la ventana.
4). El mono no tiene la banana.
Es conveniente combinar todas estas piezas de información en un solo
objeto estructurado. Escogeremos la palabra 'estado' como el functor que
retendrá los cuatro componentes anteriores :




El estado final es una situación en que el mono tiene la banana, es decir, cualquier
estado en cuyo componente último sea :
estado( _, _, _, silatiene)
Las transiciones permitidas que cambian el mundo de un estado a otro son
las siguientes :
(1). agarrar la banana.
(2). subir a la caja.
(3). empujar la caja.
(4). caminar en el cuarto.
No todas las transiciones son posibles en cada estado posible del mundo del mono. Por
ejemplo, la transición 'agarrar la banana' es solamente posible si el mono está sobre la
caja y bajo la banana y si no tiene todavía la banana. Estas transiciones ó reglas se
pueden formalizar en Prolog como una relación de tres componentes que llamaremos
'mover':

                   mover( Estado1, M, Estado2)

Los tres argumentos de la relación especifican un movimiento tal que:
Estado1 ----- M -----> Estado2
'Estado1' es el estado antes del movimiento 'M'; 'M' es el movimiento realizado, y 'Estado2' es el estado del mundo del mono después de haberse realizado el movimiento 'M'.
El movimiento 'agarrar' es una precondición necesaria antes de la meta final y lo podemos definir con la cláusula:
mover( estado( enmedio, sobrelacaja, enmedio, nolatiene),
agarrarlabanana,
estado( enmedio, sobrelacaja, enmedio, silatiene)).
Esta cláusula nos dice que después de ejecutarse, el mono tendrá la banana y permanece sobre la caja y enmedio del cuarto.
De una forma similar a la anterior podemos expresar el hecho de que el mono estando sobre el piso puede caminar de la posición P1 a cualquier posición P2. El mono puede realizar esta acción sin importar la posición de la caja y si tiene ó no la banana:

                        % caminar de P1 a P2

mover( estado( P1, sobreelpiso, B, H),
caminar( P1, P2 ),
estado( P2, sobreelpiso, B, H)).
Esta cláusula nos dice entre otras cosas:
-El movimiento realizado fue: 'caminar de una posición P1 a otra P2'.
-El mono está sobre el piso antes y después del movimiento.
-La caja está en algún lugar B y permanece en el mismo lugar.
-El estado de tiene ó no tiene la banana permanece igual después del movimiento.
La cláusula especifica un conjunto de movimientos posibles porque es aplicable a cualquier situación que se apareje ('matching') al estado antes del movimiento.
Hasta aquí hemos definido los movimientos 'agarrar la banana' (1) y 'caminar de P1 a P2' (4). Los otros dos tipos de movimientos 'empujar la caja' (3) y 'subir a la caja' (2) se pueden definir de manera similar.
Finalmente, la pregunta que nuestro programa debe contestar es: ¿ Puede el mono, desde algún estado inicial 'S', capturar la banana ?
Esta pregunta se puede formular con el predicado:

                         puedetener(S)

donde el argumento 'S' es un estado del mundo del mono. El programa para satisfacer el predicado 'puedetener' lo podemos basar en dos observaciones:
(1). Para cualquier estado 'S' en el cual el mono ya tiene la banana, el predicado 'puedetener' debe ser cierto:
puedetener( estado( _, _, _, silatiene)) :- !.
(2). De otro modo, el mono puede tener la banana desde un estado S1 si existe algún movimiento M del estado S1 a otro estado S2, tal que el mono pueda tener la banana en el estado S2 :
puedetener( S1) :-
mover( S1, M, S2),
puedetener(S2).









Se muestra el codigo del problema del mono y la banana.
































Se muestran las consultas realizadas






















Bibliografia:
APUNTES DE PROLOG
Edgar Altamirano Carmona    
Universisda Autónoma De Guerrero, 2014

PRACTICANDO CON PROLOG UNIDAD DOS: SEGUNDA PARTE

UNIDAD DOS: SINTEXIS Y SIGNIFICADO DE LOS PROGRAMAS


Significado procedural


El significado procedural especifica el cómo contesta Prolog a las preguntas. Responder
a una pregunta significa tratar de satisfacer una lista de metas. Estas pueden satisfacerse
si las variables que existen en las metas pueden instanciarse de tal modo que las metas se
sigan lógicamente del programa. Así el significado procedural de Prolog es un
procedimiento para ejecutar una lista de metas con respecto a un programa dado.
Ejecutar las metas significa tratar de satisfacerlas.
Llamemos a este procedimiento 'ejecuta':










las entradas y salidas a este procedimiento son :
entrada : un programa y una lista de metas.
salida : un indicador de éxito / falla y una instanciación particular de las variables.

el significado de las dos salidas es como sigue :

(1). El indicador de éxito/falla es 'yes' si las metas son satisfactibles y 'no' si ocurre lo contrario. Decimos que 'yes' señala una terminación exitosa y 'no' una falla.

(2). Una instanciación de las variables se produce solamente en el caso de una terminación exitosa; en el caso de una falla no hay instanciación.

Un ejemplo es el siguiente:








Es el codigo que se utiliza para mostrar el significado procedual






















Muestra consultas las descripciones verdaderas y falsas.




















Bibliografia:
APUNTES DE PROLOG
Edgar Altamirano Carmona    
Universisda Autónoma De Guerrero, 2014

PRACTICANDO CON PROLOG UNIDAD DOS

SINTEXIS Y SIGNIFICADO DE LOS PROGRAMAS


Tipos básicos de datos.

Prolog reconoce el tipo de un objeto por su sintaxis (en Prolog no es necesario declarar el tipo de un dato) :


Átomos.
Se pueden construir de tres formas:
1). Cadenas de letras, dígitos y el símbolo de subrayado (_), pero comenzando siempre con una letra minúscula.
Ejemplos :
ana nil x25 x_25 x_25 AB x_ x_y a_b_c
2). Cadenas de caracteres especiales.
Ejemplos: <---> ===> ... .:. ::=
3). Cadenas de caracteres encerrados en comillas simples (').
Ejemplos: 'Tomas' 'Juan_Hernandez' 'Jose Lopez Lopez'

Números.
Pueden ser enteros ó reales :
Ejemplos: 1 -97 3.141592 -1.2 0

Variables.
Son Cadenas de letras, dígitos y el símbolo de subrayado ( _ ) que comienzan siempre con una letra mayúscula ó un símbolo de subrayado.
Ejemplos: X Nombre_1 _x23 _55

Estructuras.
Son objetos que tienen varios componentes.
Ejemplo: fecha( 20, agosto, 1992)
fecha recibe el nombre de functor; En este caso todos sus componentes son constantes pero pueden ser variables ó incluso estructuras. Aunque las estructuras tienen varios componentes, en los programas Prolog se tratan como objetos únicos. Es decir, en Prolog, todos los objetos son términos.
Ejemplo: agosto y fecha( 20, agosto, 1992)


Matching (empatamiento).


La operación más importante sobre los términos es la de matching (empatamiento).
Dados dos términos cualesquiera decimos que "empatan" si se cumple lo siguiente :
(1). Son idénticos; ó,
(2). Las variables en ambos términos pueden instanciarse a objetos de tal modo que después
de la sustitución de las variables por estos objetos los términos puedan ser idénticos.


Significado declarativo.


Los programas Prolog pueden entenderse de dos maneras: declarativa y proceduralmente.

Significado Declarativo.

El significado declarativo de los programas determina si una meta dada es cierta, y si es el caso, para qué valores de las variables es cierta.
Para definir de manera más precisa el significado declarativo, necesitamos introducir antes el concepto de "instancia" de una cláusula.
Una instancia de una cláusula C es la cláusula C con cada una de sus variables sustituidas por algún término. Una "variante" de una cláusula C es una instancia de la cláusula C tal que cada variable se sustituye por otra variable.

El significado declarativo de los programas determina si una meta dada es cierta, y si es el caso, para qué valores de las variables es cierta.
Para definir de manera más precisa el significado declarativo, necesitamos introducir antes el concepto de "instancia" de una cláusula.
Una instancia de una cláusula C es la cláusula C con cada una de sus variables sustituidas por algún término. Una "variante" de una cláusula C es una instancia de la cláusula C tal que cada variable se sustituye por otra variable.

Ahora algo de practica...




Este programa muestra lo que es el significado declarativo.

















Con las siguientes que se hacen preguntas se pretende observar  las clausulas y verificación del el uso de la ",".
Una coma entre metas denota una conjunción de metas: todas tienen que ser ciertas.
 Prolog acepta además la disyunción de metas : cualquiera de las metas en una disyunción tiene que ser verdadera. La disyunción se indica con el símbolo de punto y coma (;).














BIBLIOGRAFIA
APUNTES DE PROLOG
Edgar Altamirano Carmona    
Universisda Autónoma De Guerrero, 2014

martes, 3 de junio de 2014

"PRACTICANDO CON PROLOG UNIDAD UNO"

"Mi árbol familiar"


Para comenzar a entender prolog en esta practica comenzaré explicando mi árbol genealógico que está conformado de la siguiente manera: Donde progenitor, abuelo, abuela, tío, tía, hermano, hermana, hombre y mujer son relaciones; Los nombres que se mencionan son argumentos.


Su servidora:
Estrella

Abuelos paternos:
-Oralia
-Julian

Abuelos maternos:
-Rosa
-Crisoforo

Mis padres:
-Silvia
-Jose

Hermanos paternos
-Jhonatan
-María
-Yari
-Celia

Hermanos maternos
-Carlos
-Yolver
-Blanca
-Yaris
-Alma

Tia:
Cristina

Nota: En el caso de mis hermanos paternos y mantenernos, tengo dos hermanas una que se llama Yari hija de mi Papá y otra que se llama Yaris hija de mi mamá, lo aclaro para al momento de hacer las pruebas no piensen que es un error.


Comienza la practica...






Muestro mi definición de relaciones en mi árbol familiar; En este caso muestra si es hombre o mujer.














Se emplea la relación de progenitor, abuelo, abuela, hermano, hermana, tío y tia.
















Para mi primera consulta pido que se muestren los progenitores de cada uno:
?-progenitor(X,Y),progenitor(X,Y).











Las siguientes consultas están enumeradas del 1 al 15, preguntando es este apartado y en la imagen se muestra el resultado.

1.-Mostrar mis padres.
 ?- progenitor(X,estrella).

2.-Pregunto si Yaris es mi hermana
  ?-hermana(yaris,estrella).

3.-Pregunto si Silvia es mi hermano, como lo pueden observar el resultado es falso porque Silvia en realidad es mi mamá.
?- hermano(silvia,estrella).

4.-Para mostrar mis hermanos lo hice de esta manera.
?- hermano(Y,estrella).

5.-Pido que se muestren mis abuelos
?- abuelo(X,estrella).

6.-Pido que se muestren mis abuelas
?- abuela(X,estrella).





7.-Pregunto si mi tía es cristina
?- tia(cristina,estrella)

8.-Muestra quienes son hijas de crisoforo mi abuelo.
?- progenitor(crisoforo,Y).

9.-Pregunto quienes son los padres de mi mamá.
?- progenitor(Y,silvia).

10.-Pregunto quienes son los padres de mi papá.
?- progenitor(Y,jose).

11.-Me muestra que Silvia (mi mamá) es progenitora de los que aparecen en el la consulta 11.
?- progenitor(silvia,Y).

12.-Me muestra que Jose (mi papá) es progenitor de los que aparecen en el la consulta 12.
?- progenitor(Jose,Y).

13.-En este caso pregunto de quién soy progenitor, el resultado es falso porque responde a que no tengo descendencia.
?- progenitor(estrella,Y).

14.-Pregunto si Yolver es mi hermano
?-hermano(yolver,estrella).

15.-Pregunto si julian es mi tío, como verán es falso porque julian es mi abuelo.



Esto es todo sobre prolog unidad uno, espero les sirva la practica que eh hecho con mi árbol familiar.
Seguiremos trabajando en mas ejemplos, así que esperen la siguiente unidad.

domingo, 4 de mayo de 2014

PROLOG


PROLOG



Prolog es un lenguaje de programación creado para representar y utilizar el conocimiento que se tiene sobre un determinado dominio. Más exactamente, el dominio es un conjunto de objetos y el conocimiento se representa por un conjunto de relaciones que describen las propiedades de los objetos y sus interrelaciones. Un conjunto de reglas que describa estas propiedades y estas relaciones es un programa PROLOG. Una definición más accesible para el usuario común sería:

Prolog es un lenguaje de programación que es usado para resolver problemas que envuelven objetos y las relaciones entre ellos. Permite ejecutar estatutos que no son otra cosa que oraciones de un lenguaje lógico elemental particular de cláusulas. Prolog por su naturaleza muestra una habilidad para describir gramáticas, en particular gramáticas libres de contexto.

Un programa Prolog está formado por una secuencia de enunciados (cláusulas): hechos, reglas y variables.

Dejo esto link para que comprendan màs sobre prolog contiene ejemplos que espero les sirva...

http://gpd.sip.ucm.es/jaime/pl/prolog.pdf