Hinweise zum autotool
Dieses Dokument, das regelmäßig aktualisiert wird, enthält Hinweise zur Verwendung des autotools, das auch in diesem Semester für den
Übungsbetrieb eingesetzt wird.
Es gibt eine einheitliche Oberfläche zum Einschreiben in
Übungsgruppen, Lösen von autotool-Aufgaben, Betrachten des Status der eigenen Übungsaufgaben, Passwortändern, etc. Sie sollten aus dem letzten Semester bereits ein Benutzerkonto
haben, ansonsten müssen Sie eins anlegen. Um am Übungsbetrieb teilzunehmen ist das Einschreiben in eine Übungsgruppe Pflicht.
Lösen von autotool-Aufgaben etc. ist nur möglich, wenn man in eine Übungsgruppe eingetragen ist.
Über das autotool lassen sich ausschließlich die autotool-Aufgaben lösen. Pflichtaufgaben sind mit
"mandatory" gekennzeichnet. Zusammen mit den schriftlichen Aufgaben bilden diese die Grundlage für die Schein-/Bonuspunktvergabe. Die anderen autotool-Aufgaben sind ein zusätzliches
Übungsangebot.
Turing-Maschinen
Wir unterscheiden im autotool zwei Arten von TM.
- TM als Akzeptor. TM akzeptiert eine Sprache, indem sie genau bei Wörtern der Sprache einen Finalzustand erreichen.
- TM als Computer. TM berechnet eine Funktion, wobei sie mit dem Funktionsergebnis auf dem Band anhält, wenn die Funktion für die gegebenen Argumente definiert ist.
Im autotool sind die Funktionsargumente unär mit Einsen codiert. Ein Punkt terminiert eine Zahl, d.h. bei einer zweistelligen Funktion würden anfangs die beiden Argumente 5 und 3 als
"11111.111." auf dem Band stehen.
- Achtung: Derzeit wird als Ergebnis nicht eine unär codierte Zahl erwartet, was eigentlich Sinn machen würde. Stattdessen wird die Länge des Wortes, das
im Finalzustand auf dem Band steht, als Zahl interpretiert. D.h. "110." ist eine 4, "279", eine 3, "....." eine 5.
- Die Turingmaschine hält an, sobald Sie einen Finalzustand erreicht hat.
Turing { eingabealphabet = mkSet "abc"
, arbeitsalphabet = mkSet "#abc"
, leerzeichen = '#'
, zustandsmenge = mkSet [ 0 , 1 , 2 ]
, tafel = collect [ ( 'a' , 0 , 'b' , 1 , R )
, ( 'a' , 2 , 'a' , 2 , L )
, ( 'b' , 1 , '#' , 2 , L )
]
, startzustand = 0
, endzustandsmenge = mkSet [ 2 ]
}
Eingabealphabet, Arbeitsalphabet, Leerzeichen, Zustandsmenge, Startzustand und Endzustandsmenge verstehen sich von selbst. Tafel bezeichnet die Übergangrelation, wobei das Tupel ( 'a' , 0
, 'b' , 1 , R ) bedeutet, dass die TM im Zustand 0 ein 'a' lesend dieses durch ein 'b' ersetzt, in den Zustand 1 übergeht und den Schreib/Lesekopf nach rechts bewegt. L entspricht der Bewegung
nach links O (nicht Null) keiner Bewegung des Kopfes. Das autotool gibt Rückmeldung bezüglich gemachter Berechnungen.
7: "b" (1,'c') "bacabbacbc"
bedeutet, dass sich die TM nach dem 7. Rechenschritt im Zustand 1 befindet, der Schreib/Lesekopf über einem c befindet, links davon b steht und rechts davon bacabbacbc.
loop- und while-Programme
Die autotool-Syntax der Programme weicht von der in der Vorlesung vorgestellten ab. Grundsätzlich gilt:
- Ein Programm ist eine Liste von durch Kommas getrennten Befehlen und steht immer in eckigen Klammern.
- Variablen können nahezu beliebig heißen.
- Analog der Definition aus der Vorlesung stehen die Eingabeparameter einer n-stelligen Funktion in x1, x2,..., xn.
- Der Funktionswert wird allerdings in x0 erwartet.
- Es gibt die in der Vorlesung definierten Wertezuweisungen nicht (immer), diese müssen ggf. mit den vorhandenen Mitteln simuliert werden.
- Es gibt auch keine Konstanten.
Es gibt immer verfügbare Befehle (Inc, Dec, Loop, ggf. While) und eine Reihe von Hilfsbefehlen sogenannten Builtins. Welche davon verwendet werden dürfen, steht in der
Aufgabenstellung. Was gebraucht aber nicht erlaubt ist, muss halt selbst implementiert werden. Die Befehle im Einzelnen:
- Inc var erhöht den Wert der Variable var um eins.
- Dec var verringert den Wert der Variable var um eins.
- Loop var Programm führt Programm entsprechend dem Wert von var mehrfach aus.
- Die Builtins haben eine spezielle Form:
Builtin {name=BuiltinName, res=Ergebnisvariable, args=[Liste der Argumente]}
-
- Der BuiltinName sagt dem Autotool, welche Funktion berechnet werden soll.
- Das Ergebnis der Berechnung wird in die Ergebnisvariable geschrieben.
- args enthält die Funktionsargumente. Diese sind immer Variablen. Die Länge der Liste hängt von der Arität der Funktion ab.
- Es gibt die folgenden Builtins. Ihre Arität steht in Klammern.
Suc (1) liefert den Nachfolger einer Variable,
Pre (1) liefert den Vorgänger einer Variable bzw. 0,
Copy (1) kopiert den Wert einer Variable,
Plus (2) addiert die Werte zweier Variablen,
Minus (2) subtrahiert zwei Variablen bzw. liefert Null falls die Differenz negativ ist,
Times (2) multipliziert zwei Variablen,
Div (2) liefert den ganzzahligen Anteil bei Division zweier Variablen,
Mod (2) liefert den Rest bei Division zweier Variablen,
Paar (2) codiert ein Zahlenpaar in eine Variable,
Links (1) liefert die erste Komponente eines codierten Zahlenpaars,
Rechts (1) liefert die zweite Komponente eines codierten Zahlenpaars
sinnarmes Beispielprogramm:
[ Inc eins,
Builtin {name=Plus, res=tempvar, args=[x2,eins]},
Loop tempvar [
Builtin{name=Copy, res=x0, args=[x2]},
Builtin{name=Pre, res=tempvar, args=[x2]},
Inc x2
]
]
Einige Aufgaben sind als Highscore-Aufgaben gekennzeichnet. Hier gibt es (unabhängig von der Wertung für den Schein) Punkte für "gute"
und schnell eingesandte Lösungen (gut hat Vorrang vor schnell). Das Kriterium für gute Lösugnen ist bei Automaten die Anzahl der Zustände, bei Ausdrücken deren
Größe. Highscore "Low" bedeutet, dass bezüglich des Kriteriums kleine Lösungen besser sind (z.B. wenige Zustände). Die besten zehn Studenten pro Aufgabe bekommen jeweils
Punkte.
Klicken Sie auf der autotool-Seite auf "Account anlegen" und anschließend auf "Uni Leipzig". Tragen Sie nun
die geforderten Daten ein.
- Benutzen Sie Ihre tatsächliche Matrikelnummer und Ihren richtigen Namen, da auch die Punkteverwaltung der schriftlichen Aufgaben über das autotool läuft.
- Geben sie eine eigene, funktionierende "...uni-leipzig.de"-Adresse an und überprüfen Sie, ob Sie die Adresse korrekt eingegeben haben.
- Benutzen Sie kein für Sie sonst wichtiges Passwort. Sie erhalten keine Bestätigungsmail, in der das Passwort noch einmal steht.
- Alle Felder müssen ausgefüllt sein.
Schließen Sie das Anlegen des Kontos ("absenden") erst ab , wenn Sie sämtliche eingegebene Daten überprüft haben.
Loggen Sie sich ein, wählen Sie die Veranstaltung und den Unterpunkt "Einschreibung". Hier sehen Sie, in
welche Übungsgruppe Sie eingetragen sind, welche Übungsgruppen es gibt, wie voll diese sind.
Durch Anklicken der gewünschten Gruppe unten, schreiben Sie sich in diese Gruppe ein, wechseln in diese (falls Sie vorher in eine andere Gruppe eingeschrieben waren, werden Sie dort
automatisch ausgetragen), bzw. verlassen diese Gruppe, wenn Sie auf die Gruppe geklickt haben, in die Sie vorher eingeschrieben waren (hinter der Gruppe steht dann "verlassen" statt "besuchen").
- Achtung! Die Anzeige wird nicht sofort aktualisiert - klicken Sie erneut auf "Einschreibung", um zu überprüfen, dass die Aktion erfolgreich war.
Falls Sie Ihr Passwort vergessen haben sollten, geben Sie ihre Matrikelnummer ein und klicken Sie auf "Login". Sie können sich
dann ein neues Passwort zuschicken lassen.
Mit Fragen zum Autotool wenden Sie sich bitte an mich per e-Mail oder Sie kommen bei mir im Büro (2-42) vorbei. Fragen von allgemeinem Interesse
werden dann auch auf dieser Seite beantwortet. Schauen Sie also immer mal wieder hier vorbei!
Kommentare bitte an uni-leipzig

nittka.de
letzte Aktualisierung: 24.08.2008