sábado, 22 de junio de 2013

Ejercicio. 2



Representación de objetos geométricos simples mediante objetos estructurados en Prolog:



Ejemplo. 1

a). Un punto en un espacio de dos dimensiones se puede definir con dos coordenadas.

Esto es la definición de un punto y el lugar geométrico correspondiente al plano.

P1 = punto(1,1).
P2 = punto(1,0).

b). Un segmento de línea con dos puntos.

Una línea se puede representar mediante dos puntos, uno inicial y el otro final.
S = línea( P1, P2) = línea( punto(1,1), punto(2,3) ).

c). Un triángulo con tres puntos.
EL triangulo es formado por tres puntos.
T = triangulo( punto(4,2), punto(6,4), punto(7,1) ).

Ejercicio. Sugiera una representación para rectángulos, cuadrados y círculos como objetos Prolog estructurados. Escriba algunos ejemplos que representen objetos físicos concretos utilizando la representación que sugirió.

Para rectángulos 
Un rectángulo es un polígono de 4 lados (una figura plana de lados rectos) en donde cada ángulo es un ángulo recto (90°). Entonces lo podemos representar conforme a su presentación en una grafica





Entonces hacemos referencia al número que se encuentra en cada ordenada y asi obtenemos a quien corresponde cada valor de la grafica.
P1=punto(A,B), P2=punto(C,B), P3=punto(A,D), P4=punto(C,D)

La representacion en Prolog es de esta manera
R=rectángulo(P1,P2,P3,P4)=((punto(A,B),(punto(C,B),punto(A,D),punto(C,D)).
 

Para cuadrados
Un polígono de 4 lados (una figura plana de lados rectos) donde todos los lados tienen igual longitud y todos los ángulos son rectos (90°). De manera análoga a la anterior construyamos una grafica de un cuadrado con líneas de igual longitud y con ángulos rectos de 90° grados.





Se puede escribir de la siguiente manera ya que existen dos números que se repiten entre ellos entonces escogeremos A y B, dado que A=-3 y B=3 entonces
P1=punto(A,B), P2=punto(B,B), P3=(A,A), P4=(B,A). Y en Prolog
C=cuadrado(P1,P2,P3,P4)=((Punto(A,B),punto(B,B)punto(A,A),Punto(B,A)).

Circulo
Una figura de 2 dimensiones que se realiza dibujando una curva que está siempre a la misma distancia de un centro. Representación grafica





Existe el punto de origen y un radio para construir una circunferencia o circulo. Entonces

D=circulo(puntoorigen(A,B),radio(X)).

2.2. 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.

El matching es un proceso que toma como entrada dos términos y checa si empatan.
  • Si no empata falla
  • Si empatan el proceso tiene éxito y las variables se instancian en ambos términos a los valores que las hacen ser idénticas.
Las reglas generales para decidir si dos términos S y T empatan son las siguientes :

  • Si S y T son constantes entonces S y T empatan únicamente si se trata de los mismos objetos.
  •  Si S es una variable y T es cualquier cosa, entonces empatan y S se instancia a T. Y a la inversa, si T es la variable, entonces T se instancia a S.
  •  Si S y T son estructuras empatan únicamente si :
    • (a). S y T contienen el mismo functor principal, y
    • (b). Todos sus componentes correspondientes empatan.
Ejercicios. 2
1. ¿ Las siguiente operaciones de matching tienen éxito ó fallan ?Si tienen éxito, ¿cuáles son las instanciaciones resultantes en las variables?

(a). punto( A, B) = punto( 1, 2).

Tiene exito ya que A=1 y B=2 y hay un empatamiento.

 (b). punto( A, B) = punto( X, Y, Z).

 Falla ya que no son identicos.

(c). +( 2, 2) = 4.

Tiene exito ya que 2+4=4. Pero cuando se hace el ejercicio en prolog sale lo siguiente, declaramos
 + (2,2). //* El signo + es como funtor entonces cuando se le pregunta si son iguales muestra lo siguiente*//
?- +(2,2)=4.
false. 
 

(d). +( 2, D) = +( E, 2).

A mi parecer tiene exito ya que 2=D y E=2 toma los valores correspondientes empatan. Pero en el programa hace algo similar a esto


?- +(2,D)=+(E,2).
ERROR: Syntax error: Operator expected
ERROR: +(2,D)
ERROR: ** here **
ERROR: =+(E,2) . 


 (c). triangulo(punto(-1,0),P2,P3) = triangulo(P1,punto(1,0),punto(0,Y)).

Tiene exito ya que punto(-1,0)=P1, P2=(1,0), P3=punto(0,Y) con Y= a cualquier valor dado.

2. Usando la representación que se definió anteriormente para segmentos de línea, escriba un término que represente cualquier segmento de línea vertical en x = 5.

S=linea(P1,P2)=(punto(5,A),punto(5,B)).

3. Asuma que un rectángulo se representa con el término rectángulo( P1, P2, P3, P4) donde P1,P2,P3,P4 son los vértices del rectángulo ordenado positivamente. Defina la relación regular( R) que es verdad (true) si R es un rectángulo cuyos lados son vertical y horizontal.

2.3 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.


Ejercicios.

1. Considere el siguiente programa:
f( 1, uno).
f( s(1), dos).
f( s(s(1)), tres).
f( s(s(s(X))), N) :- f( X, N).

¿cómo contestará Prolog las siguientes preguntas? Cuando sean posibles varias respuestas, dé al menos dos de ellas.

(a). ?- f( s(1), A).
(b). ?- f( s(s(1)), dos).
(c). ?- f( s(s(s(s(s(s(1)))))), C).
(d). ?- f( D, tres).




2. El siguiente programa dice que dos personas son parientes si,

(a). uno es predecesor del otro, ó
(b). ambos tienen un predecesor común, ó
(c). ambos tienen un sucesor común :

parientes( X, Y) :- predecesor( X, Y)
parientes( X, Y) :- predecesor( Y, X).
parientes( X, Y) :- predecesor( Z, X), predecesor( Z, Y).
parientes( X, Y) :- predecesor( X, Z), predecesor( Y, Z).

¿puede usted acortar el programa usando la notación de ';' ?

parientes( X, Y) :- predecesor( X, Y); parientes( X, Y) :- predecesor( Y, X).
parientes( X, Y) :- predecesor( Z, X), predecesor( Z, Y); parientes( X, Y) :- predecesor( X, Z), predecesor( Y, Z).

3. Reescriba el siguiente programa sin utilizar la notación de ';' :

traducir( Numero, Palabra) :-
Numero = 1, Palabra = uno;
Numero = 2, Palabra = dos;
Numero = 3, Palabra = tres.


traducir( Numero, Palabra) :- Numero = 2, Palabra = dos.
traducir( Numero, Palabra) :- Numero = 3, Palabra = tres.
traducir( Numero, Palabra) :- Numero = 1, Palabra = uno.


2.4. 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':

Ejercicio.

1. Considere el programa anterior y realize la traza de ejecución a la pregunta :
 
?- enorme(X), oscuro(X).
 
compare su traza de ejecución con la anterior, ya que esencialmente es la misma
pregunta pero con otro orden. ¿En cuál de ambos casos Prolog realiza más trabajo antes
de encontrar la respuesta final?

Al parecer es el mismo tiempo

No hay comentarios:

Publicar un comentario

DEBEN DE DEJAR SUS COMENTARIOS Y CRITICAS SOBRE LOS TRABAJOS

Seguidores