|
string_to_atom(S,A) string_to_list(S,L) string_length(S,N) string_concat(A,B,S) sub_string(S,B,N,R,E) |
ein String S wird zu einem Atom A ein String S wird zu einer Zeichenliste L die Zeichenzahl N eines Strings s zwei Strings A und B werden zu einem String S zusammengefügt ein String S wird ab Position B aufgeteilt in einen Teilstring E der Länge N und dem nachfolgenden Reststring |
Das kann man nutzen, um mit dem Prädikat sub_string ein Zeichen Z zu suchen:
sub_string(T,_,_,_,Z)
wird wahr, wenn das Zeichen Z in T gefunden wird, sonst falsch. Die restlichen Parameter in sub_string haben für die Suche keine Bedeutung und werden daher
durch _ ersetzt.
|
exp(F):-not(sub_string(F,_,_,_,"?")),write("Diagnose:"),write(F),nl. exp(F):-write(F),read(A),clause(dat(F,A,Fn),true),exp(Fn). exp(F):-write("Antwort wiederholen oder #:"),read(A), write("Neue Frage:"),read(Fn),asserta(dat(F,A,Fn)),exp(Fn). anf:-exp("krank?"). |
enthält F nicht ?, so ist F eine Diagnose und wird ausgegeben sonst zu F Antwort erfragen und, falls Nachfolgefrage Fn vorhanden, exp(Fn) aufrufen wenn Nachfolgefrage fehlt, neue Nachfolgefrage/Diagnose aufnehmen Startfrage, dabei "krank?" als Text vorgegeben |