Rekursive Funktionen in autotool
Hier, wie auch sonst, gilt im Zweifelsfall:
RTFC (Read the F..ing Quelltext).
Beispiele
Einige Beispiele für primitiv-rekursive Funktionen sind
plus = Ind 2 [ Proj 1 1 , Sub 3 [ Succ 1, Proj 3 3 ] ]
mal = Ind 2 [ Zero 1 , Sub 3 [ plus, Proj 3 1, Proj 3 3 ] ]
hoch = Ind 2 [ Sub 1 [ Succ 1, Zero 1 ], Sub 3 [ mal, Proj 3 1, Proj 3 3 ] ]
rest = Sub 2 [ Builtin 2 "minus"
, Proj 2 1
, Sub 2 [ Builtin 2 "mal"
, Proj 2 2
, Sub 2 [ Builtin 2 "durch"
, Proj 2 1
, Proj 2 2 ] ] ]
Syntax
Funktionen beschreiben wir durch Ausdrücke.
Diese entstehen aus Grundfunktionen durch
Anwendungen von Operatoren.
- Zero k
- die k-stellige Null-Funktion
- Succ 1
- die einstellige Nachfolger-Funktion
- Proj i j
- die Projektion (eines i-Tupels auf die j-te Komponente)
- Builtin i "name"
- eine i-stellige eingebaute Funktion
- Sub i [ h, g1, .. ]
- In h werden die Funktionen g1, .. eingesetzt (es entsteht eine
i-stellige Funktion)
- Ind i [ g, h ]
- die i-stellige Funktion, die durch das Induktionsschema
(primitive Rekursion) aus der (i-1)-stelligen Funktion g
und der (i+1)-stelligen Funktion h entsteht
- Min i [ g ]
- die i-stellige Funktion, die durch die Minimum-Bildung
aus der (i+1)-stelligen Funktion g entsteht
Merke:
- Nach jedem Konstruktor erscheint eine Zahl
(= die Stelligkeit der erzeugten Funktion).
- Argumente für Operatoren stehen in eckigen Klammern.
- Operatoren können beliebig tief geschachtelt werden.
- Der Zeilenumbruch innerhalb einer längeren Definition ist beliebig,
aber die die erste Spalte muß freibleiben
- Teilausdrücke können extra definiert werden,
diese Definitionen beginnen immer in der ersten Spalte.
Eingebaute Funktionen
Die Funktionen aus
Arithmetik
und Logik
sind bei den Lösungen der meisten Aufgaben als Builtins verfügbar.
Bei einer Aufgabe mit mehreren Teilen
(d. h. mehreren zu definierenden Funktionen)
sind meist bei der Lösung von Teil i
die in den Teilen ungleich oder kleiner i zu definierenden Funktionen
als Builtins verfügbar.
Sie können damit auch partielle Lösungen vom autotool prüfen lassen.
http://www.informatik.uni-leipzig.de/~joe/
mailto:joe@informatik.uni-leipzig.de