martes, 18 de junio de 2013

capitulo 2

CAPITULO 2

EJERCICIOS:
2.1.1.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ó.

Circulo(punto(X,Y),radio(X,Y))        

Rectangulo(punto(X,Y),puntoc,punto(X,Y),punto(X,Y)).

Cuadrado(punto(X,Y),punto(X,Y),punto(X,Y),punto(X,Y)).

Ejemplos:

Triangulo(punto(X,Y),punto(X,Y),punto(X,Y)).
Línea(punto(X,Y),punto(X,Y)).

Rombo(punto(X,Y),punto(X,Y),punto(X,Y),punto(X,Y)).

2.2.1.¿Las siguientes operaciones de matching tienen 
éxito o fallan?,Si tienen éxito, ¿cuáles son las instanciaciones 
resultantes en las variables?
(a). punto( A, B) = punto( 1, 2).
            Tiene éxito
            Sus instanciaciones resultantes son:
A=1
            B=2
(b). punto( A, B) = punto( X, Y, Z).
            No tiene éxito
            false.
(c). +( 2, 2) = 4.
            No tiene éxito
             false.
(d). +( 2, D) = +( E, 2).
            Tiene éxito
            Sus instanciaciones resultantes son:
D=E
            E=2
(c). triangulo(punto(-1,0),P2,P3) = triangulo(P1,punto(1,0),punto(0,Y)).
            Tiene éxito
            Sus instanciaciones resultantes son:
P2 = punto(1, 0)
P3 = punto(0, Y)
P1 = punto(-1, 0)
2..2.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.
            linea(punto(5,Y1),punto(5,Y2)).
2.2.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.
rectangulo(punto(X,Y),punto(X,Y),punto(X,Y),punto(X,Y)).
regular(R).
rectangulo(lado1(horizontal),lado2(vertical),lado3(horizontal),lado4(vertical)).
(R)=true.

2.3.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).
            Respuesta de Prolog:
            A=dos
(b). ?- f( s(s(1)), dos).
            Respuesta de Prolog :
           false.
(c). ?- f( s(s(s(s(s(s(1)))))), C).
            Respuesta de Prolog:
            C = uno.
(d). ?- f( D, tres).
          Respuesta de Prolog:
            D = s(s(1)).
2.3.2El 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) ; predecesor(Y,X) ;predecesor(Z,X),
 predecesor(Z,Y) ; predecesor(X,Z) , predecesor(Y,Z).
2.3.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=1,Palabra=uno.
traducir(Numero,Palabra) :- Numero=2,Palabra=dos.
traducir(Numero,Palabra) :- Numero=3,Palabra =tres.

2.3.4 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?
                   Traza de la Ejecució
 1)    Lista inicial de metas: enorme(X), oscuro(X).
 2)    Examina el programa de arriba hacia abajo buscando una cláusula
cuya cabeza empate con la primera meta:
enorme (X)
Se encuentra la cláusula 1: enorme (oso).
Esta cláusula no tiene cuerpo, así que la lista de metas, luego de
instanciarse se convierte en:            
 oscuro(oso)
 3)    Examina el programa para buscar la meta oscuro(oso), encuentra la 
cláusula 7 que luego de instanciarse se convierte 
 enorme(oso),negro(oso)
4)    Examina el programa para buscar la meta negro(oso), no se
encuentra ninguna cláusula. 
Por lo tanto se realiza un proceso de backtracking al paso 3) y 
se elimina la instanciación 
negro(oso)
 Se continúa examinando el programa a partir de la cláusula 7.
5)Examina el programa para buscar la meta oscuro(oso), encuentra la cláusula 8 que
luego de instanciarse se convierte en:
enorme(oso),cafe(oso)
Esta cláusula no tiene cuerpo, así que la lista de metas se queda vacía. 
Esto indica una terminación exitosa y la instanciación correspondiente 
a la variable queda como:
                  X = oso.

En la  traza de ejecución: oscuro(X),enorme(X)  Prolog realiza más trabajo 
antes de encontrar la respuesta final.

No hay comentarios:

Publicar un comentario