% UTILITAIRES %%%%%%% SAISIE D'UN TEXTE À LA CONSOLE, TRANSFORMATION EN LISTE D'ATOMES lire_phrase(Cars) :- get_char(Car), traite_car(Car, Cars). traite_car(Car, Cars) :- Car = '.', !, Cars = [], skip('\n'). traite_car(Car, [Car|Cars]) :- lire_phrase(Cars). %%%%%%% TOKENISATION /* - listes d'atomes-caractères (cf lire_phrase) - Seul séparateur reconnu = espace (suite de ) - Adaptation selon ces remarques de Covington et al. - Pas de blancs en tête, mais répétictions de blancs acceptée - Skippe les RC (et éventuellement d'autres caractères). - AMELIORATION : ACCEPTER LES MAJUSCULES, LES ACCENTS ET "NORMALISER" */ % tokenise(+LCar, -Mots) :- LCars est une liste d'atomes-caractères tokenisée en une liste d'atomes Mots. tokenise([],[]) :- !. tokenise(LCar, [Mot|Mots]) :- chope_mot(LCar, Cars, NouvLCar),!, atom_chars(Mot, Cars), tokenise(NouvLCar, Mots). chope_mot([' '|Suite], [], NouvLCar) :- !, skip_blancs(Suite, NouvLCar). chope_mot([C|Suite], Reste, NouvLCar) :- skipable(C), !, chope_mot(Suite, Reste,NouvLCar ). chope_mot([C|Suite], [C|Reste], NouvLCar) :- chope_mot(Suite, Reste,NouvLCar ). chope_mot([],[],[]). skip_blancs([' '|Suite], LCar) :- !, skip_blancs(Suite, LCar). skip_blancs(X,X ). skipable(C) :- member(C, ['\n']).