Benutzer: gast • Besitzer: mthomas • Zuletzt geändert am: 2010/11/04 10:47:04

Prolog als erste Programmiersprache

Erfahrungsbericht von H. Heerdegen

Quelle: http://www.th.schule.de/th/lfk-informatik/ideen/prolog/
 
Inhalt:
  1. veränderte Reihenfolge der Themenbereiche
  2. Gründe für diese Reihenfolge
  3. Analogien zwischen dem Fix-Prolog-System und dem ETH Zürich Oberon
  4. Varianten bei der Behandlung von Listen in Prolog

 

1. veränderte Reihenfolge der Themenbereiche
(am Hoffmann-von-Fallersleben-Gymnasium Weimar)
 

Klassenstufe 11:
1 Einführung in die Informatik und Projektarbeit (10)
2 Kommunikation in Netzen (18)
7.2 Einblick in das logik-orientierte Programmieren (25)
3 Bearbeiten von Problemen mit Pascal oder Oberon (32)

 
Klassenstufe 12:
4 Iteration und Rekusion (14)
5 Sortieren und Suchen (10)
6 Möglichkeiten und Grenzen des Einsatzes von Informatiksystemen (10)
8 Anwendung von abstrakten Datentypen (15)
9 Projektarbeit II und Prüfungsvorbereitung (25)

Im Klammern sind die nicht verbindliche Richtstundenzahlen lauf Lehrplan angegeben.
Im Schuljahr 1999/2000 habe ich für das Themengebiet "7.2 Einblick in das logik-orientierte Programmieren" beispielsweise 30 Unterrichtsstunden verwendet.
Folgende weitere Wahlthemenbereiche gibt es im Lehrplan für das Grundfach Informatik an Gymnasien:
7.1 Einblick in die Technische Informatik
7.3 Einblick in formale Sprachen

2. Gründe für die Programmiersprachenreihenfolge Prolog --> Pascal/Oberon

  1. Prolog ist eine What-Type-Language, es muss also vom Programmierer nur möglichst genau beschrieben werden, was das Problem ist. Die Lösung des Problemes selbst übernehmen die in Prolog eingebauten Backtracking- und Unifikationsalgorithmen. Im Gegensatz dazu sind Pascal und Oberon How-Type-Languages. Hier muss neben der Definition der Anfangswertbedingungen auch präzise beschrieben werden, wie das Problem zu lösen ist. Man muss also als Programmierer (und Schüler) gleich zwei Aufgaben meistern:

  2. Was ist vom Problem bekannt?
    Wie soll das Problem gelöst werden?
     
  3. In Prolog gibt es weitaus weniger vordefinierte "Pflichtsprachelemente" als in Pascal bzw. Oberon (wie zum BEGIN, VAR, END, ...).

  4.  
  5. Der Umstieg von Prolog zu Oberon bzw. Pascal fällt den Schülern leichter als umgekehrt. Das beobachteten ich und auch andere Autoren an den SchülerInnen. In den ersten beiden Informatik-Grundkursen, die ich leitete, habe ich meine schlechten Erfahrungen mit einem Umstieg von Pascal zu Prolog sammeln können.

  6.  
  7. Die unterschiedlichen Vorleistungen der Schüler werden beim Programmieren durch den Beginn mit der Programmiersprache Prolog nivelliert. Wer hat schon vor Beginn des Grundkurses Informatik privat Prolog kennengelernt. Die Programmierkurse in diversen Zeitschriften beziehen sich ebenso stets auf imperative oder objektorientierte Programmiersprachen.

  8.  
  9. Rückgriffe auf das im Themengebiet "Einblick in das logikorientierte Programmieren" sind später möglich (z.B.: Rekursion, Turm von Hanoi, ...).

  10.  
  11. Eine gute Ankopplung an den Themenbereich "Kommunikation in Netzen" gelingt durch den dort zu behandelnden Punkt "Onlinedatenbanken" und die Möglichkeit in Prolog recht einfach eine Datenbank aufbauen zu können.

3. Analogien Prolog <--> Oberon
 

Aktion/Problem in Fix-Prolog Entsprechung in Oberon
Bedienung des Systems
  1. Input (Eingabefenster)
  2. Output (Ausgabefenster)
  3. Fenster mit dem Quelltext
Bedienung des Systems
  1. Eingabe ist in jedem beliebigen Fenster möglich
  2. Ausgabe im System-Log oder im Output-Fenster
  3. Fenster mit dem Quelltext
In Fix-Prolog sind nur ganze Zahlen möglich (LONGINT). Die Datentypen LONGINT oder INTEGER können bei Einstiegsproblemen genutzt werden.
Rechenoperationen (+ - * / mod) Rechenoperationen (+ - * DIV MOD)
Consultieren der Datenbasis Compilieren des Moduls
Reconsultieren der Datenbasis System.Free Modulname mit anschließendem
Compilieren
Was leistet ein Prädikat? Was leistet ein Unterprogramm oder ein Modul?
Kommentare /* ... */ Kommentare (* ... *)

4. Varianten bei der Behandlung von Listen in Prolog
 

Auszug aus dem Thüringer Lehrplan für das Fach Informatik an Gymnasien:
"- Listen Listenseparator
Ermitteln des ersten Elementes
Ermitteln eines beliebigen Elementes
Zusammenfügen zweier Listen
Zählen der Elemente einer Liste
(Entwerfen und Implementieren der Prädikate) ... "
Unter anderem sind folgende Varianten bei der Erarbeitung der Listenprädikate denkbar:
1. Variante:

Man hält sich an die Art, Listenprädikate zu implementieren, wie sie in verschiedenen Prolog-Büchern (u.a. Arbeitsbuch Prolog) zu finden ist. Oft wird dieser Quelltext im Lehrervortrag dargeboten oder gemeinsam mit den Schülern im Unterrichtsgespräch erarbeitet. Auch selbstständige Arbeit der Schüler ist möglich, wenn sie Literaturquellen nutzen können.

Beispiel:

element(X,[X|Ls]).
element(X,[Y|Rs]):-element(X,Rs).

Probleme:
  • Diese Art der Implementierung ist vom Quelltext her sehr komplex. Die beiden Schritte 
    1. Aufteilen der Liste in Kopf und Rest
    2. Bestimmung bzw. Suche der Elemente) 


    sind nicht klar voneinander zu trennen.

  • Schon im Regelkopf müssen die Variablenbezeichner genau überlegt sein.
Vorteil:
  • effiziente Implementierung des Prädikates
2. Variante:

Auch bei dieser Variante wird der Quelltext gemeinsam mit den Schülern erarbeitet oder im Lehrervortrag dargeboten. Andere Unterrichtsformen sind meist erst beim dritten oder vierten Listenprädikat, das behandelt wird, möglich.

Beispiel:

element(E,Liste):-Liste=[Kopf|Rest], E=Kopf.
element(E,Liste):-Liste=[Kopf|Rest], element(E,Rest).

Problem:
  • geringere Effizienz des Prädikates
Vorteile:
  • Klare Trennung der beiden Schritte
    1. Aufteilen der Liste in Kopfelement und Restliste
    2. Bestimmung bzw. Suche der Elemente
  • Meist für die Schüler leichter (besser) verständlich.
3. Variante:

Bei dieser erforschen die Schüler mit Hilfe einer Testumgebung vorgegebene Prädikate.
Das Ziel, dass die Schüler die Wirkungsweise der Prädikate verstehen und sie in anderen Prolog-Programmen richtig einsetzen können, rückt mehr in den Vordergrund. Diese Variante kommt dem Programmieren mit vorgegebenen Tools nahe.
Für die Bereitsstellung der Prädikate kann man zwischen den beiden Implementationsvarianten wie oben angegeben wählen.

Beispiel:

/*
Untersuchen Sie, was das Prädikat element/2 leistet!
Nutzen und modifizieren Sie hierzu die vorgegebenen Testprädikate test1, test2 und test3.
*/

test1:-element(2,[2,3,4,5,a,b,c,2]).
test2:-element(7,[2,3,4,5,a,b,c,2]).
test3:-element(X,[2,3,4,5,a,b,c,2]).

element(E,Liste):-Liste=[Kopf|Rest], E=Kopf.
element(E,Liste):-Liste=[Kopf|Rest], element(E,Rest).

Zwei Möglichkeiten der Förderung begabter Schüler (Binnendifferenzierung im Kurs):
  1. Schüler erhalten den Zusatzauftrag, selbstständig ein weiteres Listenprädikat bei vorgegebener Spezifikation zu entwerfen und zu implementieren.
  2. Schüler erhalten den Auftrag, die Prädikate lauf Variante 1 zu analysieren und deren Wirkungsweise zu erläutern.