lunes, 9 de junio de 2014

EJERCICIOS (Capitulo 2)

2.1. Tipos básicos de datos.


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. Matching (empatamiento).

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.3. Significado declarativo.
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. 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) ; predecesor(Y,X) ;predecesor(Z,X),
 predecesor(Z,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=1,Palabra=uno.
traducir(Numero,Palabra) :- Numero=2,Palabra=dos.
traducir(Numero,Palabra) :- Numero=3,Palabra =tres.

No hay comentarios:

Publicar un comentario