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.
- 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.
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) .
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 = 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':
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?
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