Análisis Comparativo de Lenguajes - A˜no 2016 Entrega Obligatoria

Anuncio
Análisis Comparativo de Lenguajes - Año 2016
Entrega Obligatoria N◦ 1: Ejecución y Resolución de predicados en Lenguaje
Prolog
Modalidad de trabajo: se debe trabajar individualmente.
Modalidad y fecha de entrega: La resolución del práctico consistirá en tres entregas especı́ficadas
en cada ı́tem. De no haber recibido el mismo hasta ese horario, se considerará como práctico NO
ENTREGADO. Recordar que las entregas son obligatorias para REGULARIZAR la materia.
Modalidad de corrección: el código entregado será probado en el intérprete, si la cátedra considera
necesario se realizará un coloquio relacionado al desarrollo del práctico. Si el práctico no estuviera
aprobado, será devuelto al alumno para su corrección.
Enunciado:
Suponga que representamos en Prolog un texto como una cadena (una lista) de caracteres
alfabéticos, donde las palabras están separadas por un “*” que representa el espacio en blanco.
Ası́ por ejemplo, el texto “el perro verde” estará representado por la lista:
[e,l,*,p,e,r,r,o,*,v,e,r,d,e].
1. Este ı́tem se debe entregar en papel hasta el dı́a 12 de septiembre de 2016 a las 13hs.
Dado el siguiente programa Prolog:
avanzar([],[*]).
avanzar([*|L],L).
avanzar([X|L],R):- X \= *,
avanzar(L,R).
busca(X,L) :- prefijo(X,L).
busca(X,L) :- L \= [*],
avanzar(L,L1),
busca(X,L1).
Ejecute manualmente los pasos realizados para responder las siguientes consultas, la definición del predicado prefijo es la misma que la dada en el ejercicio 22 del Práctico N◦ 2 y
no se pide su ejecución paso a paso:
?- busca([v,e,r,d,e],[e,l,*,p,e,r,r,o,*,v,e,r,d,e]).
?- busca([a,l,a],[a,l,*,p,a,t,o,*,a,t,o,*,r,a,t,o]).
2. Este ı́tem se debe entregar el (archivo .pl) hasta el dı́a 25 de septiembre de 2016 a las
13hs. por aula virtual. Definir los siguientes predicados:
Defina el predicado long prom(T,R) donde T es un texto representado de la forma
explicada y en R devuelve la estructura prom(P) donde P es la longitud promedio de
todas las palabras en el texto. Ejemplo:
long_prom([e,l,*,p,e,r,r,o,*,v,e,r,d,e],R).
R= prom(4.0)
long_prom([a,l,*,p,a,t,o,*,a,t,o,*,r,a,t,o],R).
R= prom(3.25)
Defina el predicado borrar(T,P,R) donde T es un texto, P una posición del primer
caracter de una palabra y en R devuelve el texto sin la palabra elegida. Ejemplo:
borrar([e,l,*,p,e,r,r,o,*,v,e,r,d,e],4,R).
R= [e,l,*,v,e,r,d,e]
borrar([a,l,*,p,a,t,o,*,a,t,o,*,r,a,t,o],13,R).
R= [a,l,*,p,a,t,o,*,a,t,o]
3. Este ı́tem se debe entregar el (archivo .pl) hasta el dı́a 9 de octubre de 2016 a las
13hs. por aula virtual. Definir los siguientes predicados:
Defina el predicado ngramas(T,N,R) donde T es un texto, N es un entero positivo (> 0)
y R representará el resultado del predicado. En este caso, R es una lista de estructuras
gr(G,NG), donde G es un N-grama y NG es el número de veces que ese N-grama ocurre
en T. Los N-gramas que ocurren en un texto T son todas las subcadenas de N caracteres
contiguos que se obtienen desde el primer caracter de T y moviendo cada vez una posición a la derecha. Por ejemplo, los 3-gramas del texto [h,o,l,a,*,p,e,d,r,o] son
[h,o,l], [o,l,a], [l,a,*], [a,*,p], [*,p,e], [p,e,d], [e,d,r] y [d,r,o].
Por lo tanto, el predicado ngramas, deberı́a dar los siguientes resultados:
?- ngramas([a,l,*,p,a,t,o,*,a,t,o,*,u,n,*,r,a,t,o],3,R).
R = [gr([a,l,*],1), gr([l,*,p],1), gr([*,p,a],1), gr([p,a,t],1),
gr([a,t,o],3), gr([t,o,*],2), gr([o,*,a],1), gr([*,a,t],1), gr([o,*,u],1),
gr([*,u,n],1), gr([u,n,*],1), gr([n,*,r],1), gr([*,r,a],1),
gr([r,a,t],1)]
?- ngramas([s,a,l,t,o,*,a,l,t,o],2,R).
R = [gr([s,a],1), gr([a,l],2), gr([l,t],2),
gr([t,o],2),gr([o,*],1),gr([*,a],1)]
Defina el predicado maximo(L,R)donde L es una lista de estructuras gr(G,NG) como
la del ı́tem anterior, devuelve en la lista R el máximo ocurrencia de n-grama, en el
caso de haber más de uno debe retornar todos las ocurrencias con el máximo valor.
Ejemplo:
?- maximo([gr([a,l,*],1), gr([l,*,p],1), gr([*,p,a],1), gr([p,a,t],1),
gr([a,t,o],3), gr([t,o,*],2), gr([o,*,a],1), gr([*,a,t],1), gr([o,*,u],1),
gr([*,u,n],1), gr([u,n,*],1), gr([n,*,r],1), gr([*,r,a],1),
gr([r,a,t],1)], R).
R = [gr([a,t,o],3)]
?- maximo([gr([s,a],1), gr([a,l],2), gr([l,t],2),
gr([t,o],2),gr([o,*],1),gr([*,a],1)], R).
R = [gr([a,l],2), gr([l,t],2), gr([t,o],2)]
Descargar