Encaje de Patrones: Eliza Curso 2002/03, Fecha:17/01/2002 Enunciado 1 (busca) Construir un predicado busca(C,D,V) que se cumple si V es el valor de la clave C en el diccionario D El diccionario se representa como una lista de pares de la forma [( C1,V1 ),...( Cn,Vn)] ?− b u s c a ( 2 , [ ( 4 , h o l a ) , ( 2 , j u a n ) , ( 3 , p e p e ) ] ,V ) . V = j u a n Enunciado 2 (encaja) Añadir al programa anterior el siguiente predicado. e n c a j a ( [ N | Ps ] , D,R): − i n t e g e r (N) , b u s c a (N, D, L s I z q ) , append ( L s I z q , LsDer ,R) , e n c a j a ( Ps , D, LsDer ) . e n c a j a ( [ P | Ps ] , D , [ P | Rs ] ) : − atom (P) , e n c a j a ( Ps , D, Rs ) . encaja ( [ ] , ,[]). Observar y justificar el funcionamiento del predicado ante las siguientes preguntas: • ?−encaja([hola ,1], V,[hola ,amigo,pepe ]). • ?−encaja([1,es ,2], V,[juan, lopez , es ,un,poco,tonto ]). • ?−encaja([1,y,2,son,amigos ],[(1,[ juan, lopez ]),(2,[ pepe ])], V). Enunciado 3 (leePals) El siguiente fragmento define un predicado que permite leer una lista de palabras en Prolog. Construir un predicado que repita el proceso de leer una lista de palabras e imprimir la lista en orden inverso hasta que se introduzca la palabra adios l e e P a l s ( Ps ): − once ( ( g e t c o d e (C) , l e e P s (C, Ps ) ) ) . l e e P s (C, [ ] ) : − r e t o r n o (C ) , ! . l e e P s (C , [ P | Ps ] ) : − alfaNum (C ) , ! , l e e P (C, P , C s i g ) , 1 2 l e e P s ( Csig , Ps ) . l e e P s ( , Ps ): − g e t c o d e ( C s i g ) , l e e P s ( Csig , Ps ) . l e e P ( C1 , P , C s i g ): − cogeCs ( C1 , Cs , C s i g ) , a t o m c o d e s (P , Cs ) . cogeCs ( C1 , [ C1 | Cars ] , C f i n ): − alfaNum ( C1 ) , g e t c o d e ( Csig ) , cogeCs ( Csig , Cars , C f i n ) . cogeCs (C , [ ] , C): − \+ alfaNum (C ) . alfaNum (C) : − (C>=0’a , C=<0’ z ) ; ( C>=0’A , C=<0’Z ) ; ( C>=0 ’0 , C= <0 ’9). retorno (10). Enunciado 4 (eliza) Añadir el siguiente fragmento al programa anterior. e l i z a : − saludo , repeat , l e e P a l s ( Ps ) , t r a t a ( Ps ) , Ps = [ a d i o s ] , !. s a l u d o : − w r i t e ( ’ Programa c o n v e r s a c i o n a l t i p o E l i z a ’ ) , n l . t r a t a ( Ps ): − once ( ( p a t r o n ( E s t i m u l o , R e s p t a ) , e n c a j a ( E s t i m u l o , Dicc , Ps ) , e n c a j a ( Respta , Dicc , S a l i d a ) , responde ( Salida ) )). % Patrones Estimulo / Respuesta p a t r o n ( [ a d i o s ] , [ ’ Hasta ’ , l a , proxima ] ) . p a t r o n ( [ s i ] , [ puedes , s e r , mas , e x p r e s i v o , ? ] ) . p a t r o n ( [ no ] , [ puedes , s e r , mas , p o s i t i v o , ? ] ) . p a t r o n ( [ h o l a ] , [ ’ Cuentame ’ , a l g o ] ) . p a t r o n ( [ e r e s , 1 ] , [ ’ Por ’ , que , c r e e s , que , soy , 1 , ? ] ) . p a t r o n ( [ soy , 1 ] , [ ’ Por ’ , que , c r e e s , que , e r e s , 1 , ? ] ) . p a t r o n ( [ e s t o y , 1 ] , [ ’ E s t a s ’ , 1 , a , menudo , ? ] ) . p a t r o n ( [ q u i e r o , 1 ] , [ ’ Conoces ’ , a , a l g u i e n , mas , que , q u i e r a , 1 , ? ] ) . 3 p a t r o n ( [ 1 ] , [ ’ Por ’ , f a v o r , c o n t i n u a ] ) . r e s p o n d e ( [ X | Xs ] ) : − w r i t e (X) , w r i t e ( ’ ’ ) , r e s p o n d e ( Xs ) . responde ([]): − nl . Se pide: • Compilar y ejecutar el programa anterior • Modificar y añadir más capacidad conversacional al programa anterior Enunciado 5 (conceptos) Añadir patrones con el siguiente formato: p a t r o n ( [ 1 , mi , X, 2 ] , [ ’ Dime ’ , a l g o , mas , s o b r e , tu ,X] ) : − p u e d e P o s e e r s e (X ) . p a t r o n ( [ 1 , X, 2 ] , [ ’ Q u i e r e s ’ , que , hablemos , de , Y, ? ] ) : − c o n c e p t o (X,Y ) . Para ello, se pueden añadir predicados del tipo: p u e d e P o s e e r s e ( madre ) . puedePoseerse ( coche ) . c o n c e p t o ( amigo , a m i s t a d ) . concepto ( tonto , i n s u l t o s ) . concepto ( imbecil , i n s u l t o s ) . Nota: Los patrones deben añadirse antes del patrón patron ([1],...) que encaja con cualquier frase. En caso contrario encajará siempre dicho patrón por defecto Enunciado 6 (tema(Opcional)) Añadir al programa anterior información que le permita mantener una conversación sobre un tema concreto, por ejemplo: deportes, música, etc. Enunciado 7 (respuestaAlea(Opcional)) Modificar el programa eliza para que el formato de los patrones sea: patron(E,[R1,R2...Rn]). Es decir que a cada estı́mulo E le corresponden una serie de respuestas y el sistema selecciona una de dichas respuestas de forma aleatoria.