% ---------------- tokenizer.mini.pro ----------------- H.Leiss, 6/02 ---- % % Vereinfachung der Satzeingabe % ----------------------------- % Es ist muehsam, dass man Beispielsaetze in Prolog als Listen von Atomen % eingeben muss. Die folgenden Praedikate erlauben eine einfachere Eingabe: % Fordere den Benutzer zu einer Eingabe auf, und wandele diese % in einen String (Sentence), ein Atom (Satz), und eine Liste % von Atomen (Atomlist) um, und zeige Satz und Atomlist am Bildschirm: satzende :- write('Beende die Eingabe mit '),nl, read_sentence(user,Sentence,[]), name(Satz,Sentence), nl,write('Eingabe: '),writeq(Satz), tokenize(Sentence,Atomlist), nl,write('Atomliste: '),writeq(user,Atomlist). % Lies die Eingabe des Benutzers Zeichenweise zum Ende % und gib die Zeichenreihe (als String: Sentence) aus. % (Seen ist ein Akkumulator, der die schon gelesenen Zeichen sammelt.) read_sentence(Stream,Sentence,Seen) :- get0(Stream,Char), !,read_sentence(Stream,Sentence,Char,Seen). % Teste mit den beiden letzten Zeichen, ob das Ende der Eingabe % erreicht ist. Wenn ja, ist die Eingabe der umgekehrte Akkumulatur; % wenn nicht, Char sammeln und weiterlesen: read_sentence(Stream,Sentence,Char,[C|Seen]) :- satzende([C,Char]), !,reverse([C|Seen],Sentence). read_sentence(Stream,Sentence,Char,Seen) :- read_sentence(Stream,Sentence,[Char|Seen]). % Als Satz- bzw. Eingabeende gelte ".": satzende([46,10]). % ( ohne Leerzeichen!) % Wandle einen String (= Liste von ASCII-Nummern) in eine % Liste von Atomen (Woertern) um, wobei die Leerzeichen % als Worttrenner benutzt werden: tokenize(String,Atomlist) :- name(Atom,String), concat_atom(Atomlist,' ',Atom). % ---------------- tokenizer.mini.pro ---(Ende)-----------------------