/**********************************************************/ /* */ /* Inteligencia Artificial */ /* Universidad de Alicante */ /* */ /* LOGICA DE PRIMER ORDEN */ /* Prolog */ /* */ /* */ /* S.O. : MS-DOS (Windows) */ /* Interprete : SWI-Prolog */ /* Fichero : EJ09.PL */ /* */ /**********************************************************/ /* CADENAS DE CARACTERES */ /*---- Procedimientos de cadenas SWI-Prolog ----*/ eres ASCII +String2=String3 % substring(+String,+Inicio,+Long,-Sub) <- Sub es la subcadena de String que empieza en Inicio y tiene Long caracteres /*---- Procedimientos de cadenas definidos por el usuario ----*/ % leeCadena(Cad) <- lee la cadena de caracteres Cad hasta el return leeCadena(Cad) :- leeCad(Lista), string_to_list(Cad,Lista). leeCad(Cadena) :- get0(Car), (Car=10 -> Cadena=[] ; leeCad(Lista), Cadena=[Car|Lista] ). % palabrasI(F,P,R) <- la frase F consta de las palabras P y el resto R palabrasI(F,A1,A2) :- string_concat(S1,S2,F), string_to_list(S2,L2), ( L2=[] ; (L2=[L|_],(L<97;L>122)) ), string_to_atom(S1,A1), string_to_atom(S2,A2). % palabras(F,P) <- la frase F consta de las palabras de la lista P palabras(F,R) :- string_to_list(F,LF), pasa(LF,P,L), ( P\=[] -> (string_to_list(S,P), string_to_atom(S,A), R=[A|L]) ; R=L ). pasa([],[],[]). pasa([N|R1],[],R) :- separador(N),!, pasa(R1,P,R2), ( P\=[] -> (string_to_list(S,P), string_to_atom(S,A), R=[A|R2]) ; R=R2 ). pasa([C|R1],[C|P],R2) :- pasa(R1,P,R2). % subCadena(S,C) <- S es una subcadena de C subCadena(S,C) :- string_to_list(S,LS), string_to_list(C,LC), buscaInicio(LS,LC). subCad([],_). subCad([L|R1],[L|R2]) :- subCad(R1,R2). buscaInicio([L|S],[L|R2]) :- subCad(S,R2). buscaInicio(S,[_|R2]) :- buscaInicio(S,R2). % minusculas(S,M) <- M es l cadena S con todas las letras en minuscula minusculas(S,M) :- string_to_list(S,LS), minusc(LS,LM), string_to_list(M,LM). minusc([],[]). minusc([L|Resto],[M|RestoS]) :- ((L>=65,L=<90) -> M is L+32 ; M is L ), minusc(Resto,RestoS). % mayusculas(S,M) <- M es l cadena S con todas las letras en mayuscula mayusculas(S,M) :- string_to_list(S,LS), mayusc(LS,LM), string_to_list(M,LM). mayusc([],[]). mayusc([L|Resto],[M|RestoS]) :- ((L>=97,L=<122) -> M is L-32 ; M is L ), mayusc(Resto,RestoS). separador(32). % espacio separador(33). % ! separador(40). % ( separador(41). % ) separador(44). % , separador(45). % - separador(46). % . separador(58). % : separador(59). % ; separador(63). % ?