Prof. Dr. Manfred Schmidt-Schauß Fachbereich Informatik (20) Künstliche Intelligenz/Softwaretechnologie Johann Wolfgang Goethe-Universität Frankfurt am Main

Einführung in das funktionale Programmieren

Wintersemester 1995/96

Übungsblatt Nr. 9

Der Natur unsers Intellekts zufolge sollen die Begriffe durch Abstraktion aus der Anschauung entstehn, mithin diese früher daseyn, als jene. Wenn es nun wirklich diesn Gang nimmt, wie es der Fall ist bei Dem, der bloß die eigene Erfahrung zum Lehrer und zum Buche hat; so weiß der Mensch ganz gut, welche Anschauungen es sind, die unter jeden seiner Begriffe gehören und von demselben vertreten werden: er kennt Beide genau und behandelt demnach alles ihm Vorkommende richtig. Wir können diesen Weg die

natürliche Erziehung nennen. aus Arthur Schopenhauer: Parerga und Paralipomena II, §. 372.

Aufgabe 1

Wir wollen in dieser Aufgabe CORE-FP Programme aus einer Datei einlesen und parsen:

a) Implementieren sie in Gofer einen Scanner für COPRE-FP. Er soll einen String als Eingabe und eine Tokenliste als Ausgabe haben. Der Datentyp Token habe eine Form der Art:

Token =  LPAR
       | RPAR
       | Ident String
       | Arith (Int -> Int -> Int)
       | DEF
       | Int Int
       | ...

Der Scanner soll in der Lage sein, Leerzeichen in verschiedenster Form zu überlesen.

b) Schreiben sie eine kontextfreie Grammatik für CORE-FP Programme. Die erzeugte Sprache soll Infixnotation von eingebauten Funktionen erlauben und eine implizite Klammerung ermöglichen.

c) Implementieren Sie einen Parser, der den Tokenstream aus Teil a) nach der Grammatik in Teil b) parst.

d) Integrieren Sie den Parser aus c) in ihren CORE-FP-Interpretierer. Ermöglichen Sie dabei ein Einlesen von CORE-FP-Programmen aus einer Datei.

Aufgabe 2

Wir machen einen Ausflug in die Ki: In dieser Aufgabe geht es um ein kleines Wissenssystem, das eine natürlichsprachliche Anfrage erlaubt.

a) Modellieren Sie eine Wissensgebiet Ihrer Wahl als eine Miniwelt, in der es Individuen, Mengen von Individuen und zweistellige Relationen zwischen Individuen gibt.

Beispiel: Die Miniwelt des Fachbereich 20.

Individuen: Schmidt-Schauß, Zicari, Kemp, Panitz, Lautermann, Sutor, Leuck, Pete, Kist, Ti, Kea, …

Mengen: Professor, wissenschaftlicher-Mitarbeiter, Programmierer, Italiener, Frau, Professur, Mensch, theoretische-Informatik, praktische-Informatik, …

Relationen: arbeitet-für, ist-auf-gleichem-Stockwerk-wie, …

b) Schreiben Sie eine kontextfreie Grammatik, die Anfragen an die von Ihnen modellierte Miniwelt erlaubt.

Beispiel: Die Miniwelt des Fachbereich 20.

Wer ist ein Professor und eine Frau? Wer ist wissenschaftlicher Mitarbeiter und arbeitet für Kist? Wer ist eine Frau und arbeitet für eine Professur, die auf dem gleichem Stockwerk wie Dbis ist? Welche Professur ist praktische Informatik? Welcher wissenschaftlicher Mitarbeiter arbeitet für eine Professur, die theoretische Informatik ist?

c) (Zusatzaufgabe) Implementieren Sie die Grammatik aus b) und koppeln Sie den Parser mit semantischen Funktionen, die eine Antwort aus der Datenbasis Ihrer Miniwelt generieren.