Encaje de Patrones: Eliza

Anuncio
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.
Descargar