Table Of ContentSpringer- Lehrbuch
Hanspeter Bieri Felix Grimm
Datenstrukturen
in APL2
Mit Anwendungen aus der ktinstlichen Intelligenz
Mit 198 Abbildungen
Springer-Verlag
Berlin Heidelberg New York
London Paris Tokyo
Hong Kong Barcelona
Budapest
Professor Dr. Hanspeter Bieri
Dr. Felix Grimm
Universitiit Bern, Institut ftir Inforrnatik
und angewandte Mathematik
Liinggassstr. 51
CH-3012 Bern
Schweiz
ISBN-13: 978-3-540-55747-0 e-ISBN-13: 978-3-642-77680-9
DOl: 10.1007/978-3-642-77680-9
Die Deutsche Bibliothek • CIP-Einheitsaufnahme
Bieri. Hanspeter: Datenstrukturen in APL2: mit Anwendungen aus der kiinstlichen Intelligenz/ Hanspeter
Bieri; Felix Grimm. Berlin; Heidelberg; New York; London; Paris; Tokyo; Hong Kong; Barcelona;
Budapest: Springer, 1992
(Springer-Lehrbuch)
NE: Grimm, Felix:
Dieses Werk ist urheberrechtlich geschiitzt. Die dadurch begriindeten Rechte, insbesondere die der
Obersetzung, des Nachdrucks, des Vortrags, der Entnahme von Abbildungen und Tabellen, der Funk
sendung, der Mikroverfilmung oder der Vervielfliltigung auf anderen Wegen und der Speicherung in
Datenverarbeitungsanlagen, bleiben, auch bei nur auszugsweiser Verwertung, vorbehalten. Eine Verviel
fliltigung dieses Werkes oder von Teilen dieses Werkes ist auch im Einzelfall nur in den Grenzen der
gesetzlichen Bestimmungen des Urheberrechtsgesetzes der Bundesrepublik Deutschland vom 9. Septem
ber 1965 in der jeweils geltenden Fassung zUliissig. Sie ist grundsiitzlich vergiitungspflichtig. Zuwider
handlungen unterliegen den Strafbestimmungen des Urheberrechtsgesetzes.
© Springer-Verlag Berlin Heidelberg 1992
Umschlaggestaltung: Struve & Partner, Heidelberg
Satz: Reproduktionsfertige Vorlage vom Autor
45/3140 -5 4 3 2 I 0 - Gedruckt auf siiurefreiem Papier
Vorwort
Das vorliegende Buch ist als hohere EinfUhrung in das Programmieren mit
APL2 gedacht, und zwar sowohl fUr das Selbststudium als auch als Grund
lage oder Erganzung zu einer Informatik-Vorlesung fUr untere bis mittlere
Semester. Es solI aber auch einem motivierten Programmieranfanger zu
ganglich sein und enthalt deshalb eine dafiir geniigend breite und vollstan
dige Zusammenfassung der Grundelemente von APL2. Das Buch wendet
sich vor allem an zwei Gruppen von Lesern:
- an Programmierer anderer Sprachen, wie Pascal oder Fortran, die lernen
mochten, wie sich die dort gelaufigen Datenstrukturen und Programmier
techniken auch in APL2 verwenden lassen; die wissen mochten, was APL2
besser "kann", welche Probleme sich mit APL2 einfacher, eleganter,
efflzienter losen lassen
- an APL2- oder APL-Programmierer, die weitere Moglichkeiten "ihrer"
Sprache kennenlernen mochten; die gewohnt sind, "in Arrays zu denken",
sich mit der Zeit und zunehmendem Mut aber auch an Problemstellungen
wagen wollen, fiir deren Losung sich z.B. eher Baume oder Graphen als
Datenstrukturen aufdrangen als Arrays.
Die Kiinstliche Intelligenz ist ein wichtiges Teilgebiet der Informatik, das sich
heute in einer starken Entwicklung befindet. Wie der Untertitel des Buches
andeutet, sollen hier ein paar interessante kleinere Anwendungen aus diesem
Gebiet vorgestellt werden, die einige fortgeschrittenere Moglichkeiten von
APL2 besonders schon illustrieren. Eine Einfiihrung in die Kiinstliche Intel
ligenz wird nicht bezweckt. Wohl aber ware es erfreulich, wenn die aufge
zeigten KI-Anwendungen mithelfen konnten, das Interesse an diesem wich
tigen Gebiet zu wecken.
Der erste Teil des Buches bietet eine Kurzeinfiihrung in APL2 sowie ver
schiedene weitere Vorbereitungen, auf die sich die anschliessenden Teile ab
stiitzen. Der zweite Teil behandelt die wichtigen li~earen Datenstrukturen:
line are Liste, Stack und Queue. Dabei wird einerseits gezeigt, wie sich das in
Sprachen wie Pascal, PL/I oder C iibliche Zeiger-Konzept oder List
Processing auf einfache Weise auch in APL2 nachbilden und anwenden lasst.
Anderseits werden aber die gleichen Datenstrukturen auch auf eine
APL2-gerechte Weise eingefiihrt und anschliessend die beiden "Philoso
phien" miteinander verglichen. Teil drei stellt in einem gewissen Sinn den
zentralen Teil dar. Er behandelt die wichtigsten nichtlinearen Datenstruk
turen - Mengen, bin are Baume, geordnete Baume und Graphen -
VI Vorwort
APL2-gerecht, zusammen mit typischen Anwendungen. Der abschliessende
vierte Teil ist der Kiinstlichen Intelligenz gewidmet. Er fUhrt anhand sehr
einfacher, anschaulicher Beispiele in einige KI-Themenkreise ein: Graph
suche, Bildanalyse und Expertensysteme. Dabei werden die Moglichkeiten
von APL2 im Zusammenhang aufgezeigt und gleichzeitig einfache, aber ty
pische Methoden bzw . .AIgorithmen zu den erwiihnten Themenkreisen vor
gestellt.
Der jetzige Zeitpunkt scheint den Autoren giinstig zu sein, um ein Buch
iiber Datenstrukturen in APL2 zu verfassen. Erstens bieten erst APL2 (seit
1982) und iihnliche Erweiterungen von APL die dazu notigen Sprachele
mente: verschachtelte und gemischte Arrays. Zweitens sind APL2/PC und
iihnliche APL-Versionen fUr den Personal Computer erst seit wenigen Jahren
auf dem Markt. Beide Entwicklungen diirften Marksteine in der schon recht
langen Lebensgeschichte von APL darstellen und seine Attraktivitiit - auch
jiingeren Programmiersprachen gegeniiber - noch steigern.
Das vorliegende Buch stiitzt sich auf die APL2-Versionen APL2/370 (fUr
Grosscomputer), APL2/PC und TryAPL2 (kostenlose reduzierte Variante
von APL2/PC) von IBM. Diese drei Versionen unterscheiden sich beziiglich
der im Buch verwendeten Moglichkeiten von APL2 nur unwesentlich.
Selbstverstiindlich kann das Buch auch zusammen mit anderen
APL-Dialekten verwendet werden, die iihnliche Erweiterungen wie APL2
aufweisen. Die Autoren haben versucht, das Grundsiitzliche der "APL2-
Philosophie" deutlich zu machen und anzuwenden, allenfalls auch unter
Verzicht auf spezielle - eventuell interessante - Moglichkeiten einer be
stimmten Implementierung.
Der eine Autor hat APL vor zwanzig Jahren als seine erste Programmier
sprache kennengelernt, der andere vor gut zehn Jahren als seine dritte. Beide
sind iiberzeugte Benutzer von APL und jetzt APL2, aber keine "Freaks". Sie
haben mehrmals eine Standardvorlesung Datenstrukturen und Algorithmen
durchgefUhrt, zuerst unter Verwendung von PL/l, spiiter von Pascal. Ihre
Erkenntnis, dass sich viele der dort behandelten Datenstrukturen und Tech
niken ebenso gut oder besser mit APL2 realisieren lassen als mit dies en zwei
Sprachen, fUhrte zur Entstehung des vorliegenden Buches. Die Autoren
mochten aber betonen, dass sie iiberzeugte Gegner von Glaubenskriegen
sind, auch hinsichtlich Programmiersprachen.
Dr. Heinz Bruggesser und Dr. Andreas Hiinecke, die seit vielen J ahren
unsere zuverliissigsten Ansprechpartner in APL- und APL2-Fragen sind,
haben die Miihe auf sich genommen, den ganzen Text kritisch zu iiberpriifen.
DafUr danken wir beiden herzIich. Unser Dank gebiihrt auch der Firma
IBM Schweiz fUr die zeitweise Freistellung von Dr. Bruggesser und fiir
weitere Unterstiitzung. Herr UIi Rubli hat uns mit verschiedenen Auskiinf
ten weitergeholfen. Dr. Hans Wossner yom Springer-Verlag danken wir fUr
sein Interesse an unserem Vorhaben und seine Anregungen sowie fUr die zii
gige Herausgabe unseres Buches.
Bern, im Juni 1992 Hanspeter Bieri, Felix Grimm
Inhaltsverzeichnis
Teil A. Grundlagen ........................................ 1
1. Einleitung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Datentypen und Datenstrukturen ......................... 7
3. Kurzeinluhrung in APL2 ............................... 9
3.1 Grundinformationen iiber APL2 ......................... 9
3.2 Arrays ........................................... 14
3.2.1 Standarddatentypen ................................. 14
3.2.2 Einfache Skalare ................................... 16
3.2.3 Einfache Vektoren .................................. 20
3.2.4 Beliebige einfache Arrays ............................. 29
3.2.5 Verschachteite Arrays ............................... 39
3.3 Programmieren .................................... 51
3.3.1 Ein erstes APL2-Programm ........................... 51
3.3.2 Die iiussere Form eines Programms ...................... 53
3.3.3 Spriinge .......................................... 56
3.3.4 Rekursion ........................................ 58
3.3.5 Die primitiven Funktionen Execute und Format ............ 60
3.3.6 Definierte Operatoren ................................ 62
3.4 Zur Systemumgebung ................................ 64
3.4.1 Allgemeines ....................................... 64
3.4.2 Umgang mit Workspaces und Bibliotheken ................ 65
3.4.3 Hilfen fUr das Testen von Programmen ................... 68
3.5 Programmbeispiele. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
3.5.1 Entfernen von Duplikaten aus einem Vektor ............... 72
3.5.2 Selektive Spezifikation mittels Pick ....... ' ............... 74
3.5.3 Suchpfad eines Arrayelementes bestimmen ................ 78
3.5.4 Ein Zerlegungsproblem ............................... 81
4. Abstrakte Datentypen und ihre Implementierung ............. 87
4.1 Abstrakte Datentypen ............................... 87
4.2 Drei Implementierungsmethoden ........................ 88
4.2.1 APL2-gerechte Implementierung ........................ 88
VIII Inhaltsverzeichnis
4.2.2 Nachbilden des List Processing in APL2 .................. 89
4.2.3 Matrix-Implementierung .............................. 89
4.2.4 Pseudopointer-Implementierung ........................ 93
Tell B. Lineare Datenstrukturen ............................. 97
5. Lineare Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 99
5.1 Der abstrakte Datentyp Lineare Liste .................... 99
5.2 APL2-gerechte Implementierung von linearen Listen ........ 101
5.3 Matrix-Implementierung von linearen Listen .............. 104
5.4 Pseudopointer-Implementierung von linearen Listen ........ 111
5.5 Vergleich der drei Implementierungsmethoden ............. 116
6. Stack und Queue .................................. 119
6.1 Stack. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 119
6.1.1 Der abstrakte Datentyp Stack ........................ 119
6.1.2 Implementierung des ADT Stack ...................... 120
6.1.3 Eine Anwendung des ADT Stack ...................... 122
6.2 Queue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 124
6.2.1 Der abstrakte Datentyp Queue ........................ 124
6.2.2 Implementierung des ADT Queue ...................... 125
6.2.3 Eine Anwendung des ADT Queue ..................... 126
7. Klassische Algorithmen und ihre Eignung fur APL2 ......... 133
7.1 Vorbemerkungen .................................. 133
7.2 Der Algorithmus von Horner ......................... 133
7.3 Binares Suchen ................................... 138
7.4 Der Merge-Algorithmus ............................. 141
7.5 Schlussfolgerungen ................................. 144
Tell C. Nichtlineare Datenstrukturen ......................... 147
8. Mengen und Abblldungen ............................ 149
8.1 Der abstrakte Datentyp Menge ........................ 149
8.2 Implementierung durch Aufzahlen der Elemente ........... 151
8.3 Bitvektor-Implementierung ........................... 155
8.4 Abbildungen ..................................... 158
8.4.1 Der ADT Abbildung ............................... 158
8.4.2 Implementierung des ADT Abbildung .................. 159
8.4.3 Eine Anwendung des ADT Abbildung .................. 161
8.5 Priority Queues ................................... 163
8.5.1 Der abstrakte Datentyp Priority Queue .................. 163
Inhaltsverzeichnis IX
8.5.2 Implementierung des ADT Priority Queue ............... 164
8.5.3 Eine Anwendung des ADT Priority Queue ............... 165
8.6 Anwendung auf relation ale Datenbanken ................ 169
9. Biume. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 179
9.1 Der abstrakte Datentyp Binarer Baum .... ".............. 179
9.2 Implementierung des ADT Binarer Baum ................ 182
9.3 Huffman-Code .................................... 188
9.3.1 Konstruktion des Huffman-Baumes .................... 189
9.3.2 Codieren von Nachrichten nach Huffman ................ 192
9.3.3 Decodieren von Binarzeichenfolgen nach Huffman ......... 194
9.4 Der abstrakte Datentyp Allgemeiner Baum ............... 195
9.5 Implementierung des ADT Allgemeiner Baum ............. 197
9.6 Tries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 200
10. Graphen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 205
10.1 Der abstrakte Datentyp Graph ........................ 205
10.2 Implementierung von gerichteten Graphen ............... 209
10.2.1 Implementierung als Mengenpaar ...................... 209
10.2.2 Implementierung mittels Adjazenzmatrix ................. 211
10.2.3 Implementierung mittels Adjazenzliste ................... 213
10.2.4 Konversion der drei Implementierungsarten .............. 215
10.3 Exhaustive Graphsuche ............................. 217
10.4 Transitive Hiille von Graphen ........................ 223
10.5 Zusammenhangskomponenten ........................ 227
10.6 Erganzende Bemerkungen ............................ 230
Teil D. Anwendungen aus der Kiinstlichen Intelligenz 233
11. Heuristische Graphsuche ............................. 235
11.1 Suchverfahren in der Kiinstlichen Intelligenz .............. 235
11.2 Markierte Graphen ................................ 236
11.3 Heuristische Graphsuche ............................ 239
12. Bildverarbeitung und Bildanalyse ....................... 247
12.1 Einleitung ....................................... 247
12.2 Bildvorverarbeitung ................................ 251
12.2.1 Verbesserung des Kontrastes .......................... 251
12.2.2 Eliminieren von gewissen Grauwerten ................... 252
12.2.3 Binarisieren von Bildern ............................. 254
12.3 Konturlinien-orientierte Bildsegmentierung ............... 256
12.3.1 Konturliniendetektion nach Sobel ...................... 256
12.3.2 Konturlinienverbesserung mittels Schwellwertoperationen 260
x
Inhaltsverzeichnis
12.3.3 Bestimmen der Koordinaten von Konturlinienpunkten ....... 261
12.4 Regionen-orientierte Bildsegmentierung .................. 266
12.4.1 Zusammenhiingende Bildkomponenten mittels Graph bestimmen 266
12.4.2 Zusammenhiingende Bildkomponenten direkt im Bild bestimmen 273
12.5 Bildsequenzen .................................... 274
12.5.1 Differenzbilder .................................... 275
12.5.2 Differenz von Konturlinienbildern ..................... 277
12.6 Zusammenfassung ................................. 279
13. Wissensverarbeitung und Expertensysteme ................ 281
13.1 Einleitung ....................................... 281
13.2 Regelbasierte Wissensdarstellung und -nutzung ............ 285
13.2.1 Wissensdarstellung mittels Regeln ...................... 285
13.2.2 Wissensnutzung mittels Regeln ........................ 288
13.3 Ein regelbasiertes Expertensystem ...................... 292
13.4 Eine Erkliirungskomponente fUr regelbasierte Expertensysteme 300
13.5 Frame-basierte Wissensdarstellung und -nutzung ........... 306
13.5.1 Wissensdarstellung mittels Frames ..................... 306
13.5.2 Wissensnutzung mittels Vererbung ..................... 312
13.5.3 Wissensnutzung mittels Matching ...................... 315
13.6 Ergiinzende Bemerkungen iiber Expertensysteme ........... 317
14. Kiinstliche Intelligenz und APL2 ....................... 319
14.1 Kiinstliche Intelligenz ............................... 319
14.2 APL2 als KI-Sprache ............................... 321
Anbang 323
A. Weitere Programme ................................ 325
A.l Die Funktion PA THALL ............................ 325
A.2 Die Funktion LOCAT EV ............................ 326
A.3 Die Funktion INSERTDB ........................... 327
A.4 Die Funktion CONSULT ............................ 327
B. Die verwendeten APL2-Symbole ....................... 329
Literatur ............................................. 331
Sachwortverzeichnis 335
Teil A
Grundlagen
Description:Mit dem Erscheinen von PC-Versionen (seit 1988) hat die leistungsfähige Programmiersprache APL2 deutlich an Attraktivität und Verbreitung gewonnen. Als Entwicklungssystem für komplexe Anwendungen, die eine schnelle, interaktive Analyse großer Datenmengen erfordern, hat APL sich einen festen Plat