This is a hint (Hinweis) text of GUPU taken literally from the system. It's probably not very interesting reading for you.
**NEXT:To continue the guided tour go back where You came from
**NEXT:Continue reading the hints in German (...)

Dieser Hinweis ist aus der Übung im WS 1994/95 oder aus einer noch älteren Übung oder war nie Teil einer Übung und ist daher möglicherweise für spätere Übungen nicht gültig!


        
    Partielle Auswertung von Programmen

Einige Beispiele, die z.B. die Schnittstelle
\hinweis{makenextdone} verwendeten, oder
ausdruck//1, haben Programmiertechniken
gezeigt, die es erlauben, relativ allgemeine
und erweiterbare Programme zu schreiben. Diese
Allgemeinheit hat aber einen oft entscheidenden
Nachteil: Die Programme laufen wesentlich
langsamer als äquivalente effizient kodierte
Varianten. Ist etwa beim Ziel ausdruck_liste/2
der Ausdruck schon vor einem Beweis bekannt,
nur die zu betrachtende / erzeugende Liste
unbekannt, könnte man eigentlich ein
spezialisiertes und effizienteres Programm
schreiben.

Man steht so früher oder später vor der
gleichen unangenehmen Wahl, wie auch in anderen
Programmiersprachen: Entweder man entscheidet
sich für Effizienz (speziellere ,,auscodierte``
Programmteile, in Modula oder C vermeidet man
dann möglichst Prozeduraufrufe etc.) und nimmt
dadurch einen erhöhten Kodierungs- und
Wartungsaufwand in Kauf, oder man bleibt bei
der Allgemeinheit und riskiert damit die
Verwendbarkeit des Programms.

Erfahrungsgemäß laufen z.B. metainterpretierte
Programme in Prolog um ca. eine Faktor 3-10
langsamer. Manchmal ist der Mehraufwand durch
Allgemeinheit auch exponentiell! Es kommt oft
vor, daß man in einem Programm mehrere solcher
Interpretationsebene einführt, um das Programm
wartbarer zu machen. (siehe z.B.
\hinweis{makenextdone} für eine solche
Verallgemeinerung, die man auch innerhalb eines
Metainterpreters verwenden könnte). Diese
Mehrkosten multiplizieren sich so weit, daß
daraus einige Größenordnungen werden. (Faktor
1000 nicht unüblich). Durch einen solchen
Mehraufwand kann man leicht eingeschüchtert
werden und versucht sein, sich einen
,,effizienteren`` Programmierstil anzueignen.



Bevor Sie aber in die Niederungen der
,,effizienten`` Programmiererei hinabsteigen,
die auch in Prolog nicht viel besser als in
anderen Programmiersprachen ist, versuchen Sie
einmal, genau diese Aufgabe einem Programm zu
überlassen.

Nehmen Sie etwa die Prädikate aus Beispiel 28.
Schreiben Sie etwa statt

:- letztes_app(X, Xs).
nun
:- pe letztes_app(X, Xs).

Es wird nach dem DO ein spezialisiertes
Programm am Beispielende eingefügt. Sehen Sie
sich dieses Programm genauer an!

oder

:- pe ausdruck_liste({[a]}, L).

    \hinweis{mixtusproblem}

Der in dieser Umgebung eingebaute partielle
Auswerter heißt Mixtus. Er wurde am SICS
(© Swedish Institute of Computer Science 1991)
von Dr. Dan Sahlin in Prolog entwickelt.

        \hinweis{mixtusman} detailliertere
                            Erklärung
        \hinweis{PrologAllgemein}
Zurück: \hinweis{init}

**NEXT:To continue the guided tour go back where You came from
**NEXT:Continue reading the hints in German