Programación Avanzada (PAV)

Anuncio
Programación Avanzada (PAV)
Examen Parcial —1 de Diciembre de 1998—
Ejercicio 1 (Tema 2)
Obtener la forma plana (y, en su caso, reordenada) del hecho :
p(X,s(s(zero)),s(s(X))).
Respuesta:
y de la query :
?- p(zero,A,B).
Respuesta:
Nota: se deben usar los registros de argumento A1,...,An. Recordad que las ecuaciones “eliminables” no
deben aparecer.
Ejercicio 2 (Tema 2)
Obtener la secuencia de instrucciones asociada a la siguiente forma plana de la query ?- p(f(X,a),X,g(b)).:
X5 = a, A1 = f(X4,X5),
A2 = X4,
X6 = b,
A3 = g(X6)
Respuesta:
100:
101:
102:
103:
104:
105:
106:
107:
108: call p/3
Ejercicio 3 (Tema 3)
Completar la siguiente secuencia de instrucciones resultante de compilar el programa Prolog:
q(a).
q(X,X).
p(X,Y) :- q(X), q(X,Y).
?- p(A,B).
Respuesta:
100: q/1: get_structure a/0,A1
101:
102:
103:
104:
proceed
105: p/2: allocate 2
106:
107:
108:
109:
110:
111:
112:
call q/2
113:
114: query: allocate 0
115:
116:
117:
118:
1
Ejercicio 4 (Tema 3)
Dado el programa Prolog:
igual(X,X).
resultado(s(a)).
inc(X,Y) :- igual(X,a), resultado(Y).
?- inc(a,A).
cuya secuencia de instrucciones asociada es:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
igual/2: get_variable X3,A1
get_value X3,A2
proceed
resultado/1: get_structure s/1,A1
unify_variable X2
get_structure a/0,X2
proceed
inc/2: allocate 1
get_variable X3,A1
get_variable Y1,A2
put_value X3,A1
put_structure a/0,A2
call igual/2
put_value Y1,A1
call resultado/1
deallocate
query: allocate 0
put_structure a/0,A1
put_variable X3,A2
call inc/2 <------------- P
deallocate
halt <--------------------------- CP
realizad la ejecución de las instrucciones, comenzando en la instrucción apuntada por P y partiendo del
siguiente estado para HEAP, STACK y los registros (si los valores que hay escritos cambian, tachad el valor
actual y escribid el nuevo a la derecha):
1000
1001
1002
H → 1003
1004
1005
1006
1007
1008
1009
HEAP
STR 1001
a/0
REF 1002
E → 2000
2001
2002
2003
2004
2005
2006
STACK
1997
121
0
Registros Xi (Ai)
1
2
3
STR
REF
REF
1001
1002
1002
Señalad también la posición en memoria de la variable A y dar su valor al finalizar la ejecución:
2
Ejercicio 5 (Tema 4)
Obtener la secuencia de instrucciones resultante de compilar el programa Prolog:
igual(mo,mo).
igual(mu,mu).
lee(ma).
lee(me).
lee(mi).
lee(X) :- igual(X,mo).
lee(X) :- igual(X,mu).
Respuesta:
100: igual/2: try_me_else L1
101:
102:
103:
proceed
104: L1:
105:
get_structure mu/0,A1
106:
107:
108: lee/1: try_me_else L2
109:
110:
111: L2:
112:
113:
114: L3:
115:
116:
117: L4: retry_me_else L5
118:
119:
get_variable X3,A1
120:
121:
122:
123:
deallocate
124: L5:
125:
126:
127:
128:
129:
130:
Ejercicio 6 (Tema 4)
Escribir un programa Prolog que contenga una definición de procedimiento indeterminista (al menos 2
cláusulas) en cuya ejecución se cree un punto de elección y éste no sea realmente necesario
Nota: escribid el programa y la query.
Resultado:
3
Alternativos: realizar sólo uno
Ejercicio 7 (Tema 5)
Obtener la secuencia de instrucciones resultante de compilar la query Prolog:
?- q(f(a),f(g(X)),X).
Respuesta:
100: allocate 0
101:
102:
103:
104:
105:
106:
107:
108: call q/3
109: deallocate
empleando las instrucciones especializadas para el tratamiento de las constantes.
Ejercicio 8 (Tema 5)
Obtener la secuencia de instrucciones resultante de compilar el hecho Prolog:
q([X,Y],[X|Y]).
Respuesta:
100: q/2: get_list A1
101:
102:
103:
104:
105:
unify_variable X6
106:
107:
108:
109:
110:
get_list A2
proceed
empleando las instrucciones especializadas para el tratamiento de las listas (pero no para las constantes).
Ejercicio 9 (Tema 5)
Obtener la secuencia de instrucciones resultante de compilar el programa Prolog:
q(a,b).
p(A,B,_,A) :- q(A,C).
Respuesta:
100: q/2: get_structure a/0,A1
101:
102:
proceed
103: p/4: allocate 0
104:
105:
106:
107:
108:
109:
call q/2
deallocate
empleando las instrucciones especializadas para el tratamiento de las variables anónimas (pero no para las
constantes).
4
Descargar