miércoles, 14 de enero de 2015

Ejercicios - operaciones matching



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

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

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 é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 resultantes son:
D=E
E=2
(e). triangulo(punto(-1,0),P2,P3) = triangulo(P1,punto(1,0),punto(0,Y)).
Tiene éxito
Sus 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