<div class="notebook"> <div class="nb-cell markdown" name="md1"> # 04.09. endlicher Automat Gegeben sei der folgende endliche Automat: </div> <div class="nb-cell html" name="htm1"> <img src="https://prolog.cl.phil.hhu.de/wp-content/uploads/2019/10/grafik-1.png" alt=""> </div> <div class="nb-cell markdown" name="md2"> Dieser Automat akzeptiert die Sprache aller Sequenzen über dem Alphabet {a,b}, die eine gerade Anzahl von a’s beinhalten. Repräsentiere diesen Automaten in Prolog und schreibe ein Prädikat fsa_accept/1, das als Argument eine Liste nimmt und gelingt, wenn die Liste eine von dem Automaten akzeptierte Sequenz ist. Teil dieser Aufgabe ist auch, sich das Datenformat, in dem der Automat in Prolog repräsentiert wird, auszudenken! fsa_accept ruft also andere Prädikate auf, die man auch selbst implementieren muss. Das Prädikat fsa_accept soll wirklich den gezeigten Automaten modellieren. Lösungen, die z.B. alle b's aus der Eingabeliste löschen und prüfen, ob die übrig gebliebene Liste eine gerade Länge hat, zählen NICHT. </div> <div class="nb-cell program" data-background="true" name="p1"> % fsa_accept\2 % Tipp: Dieses mal ist es wirklich wichtig sich eine geeignete Struktur zu überlegen in % der die einzelnen Zustände und Übergange eines Automaten gespeichert werden können. % Hierbei ist Rekursion und die Head-,Tailverarbeitung sicher hilfreich. fsa_accept(_) :- write("+++ Dein Programmcode hier! +++"). </div> <div class="nb-cell query" name="q1"> write("Wird akzeptiert: "), fsa_accept([a,b,a,a,b,b,a]). </div> <div class="nb-cell query" name="q2"> write("Unbekanntes Eingabesymbol c: "), fsa_accept([a,a,c]). </div> <div class="nb-cell query" name="q3"> write("Keine gerade Anzahl an a's: "), fsa_accept([a,b]). </div> </div>