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