/**********************************************************/
/* */
/* 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). % ?