• Keine Ergebnisse gefunden

PERPLEX: Logisches Programmieren an Hand von Beispielen

N/A
N/A
Protected

Academic year: 2022

Aktie "PERPLEX: Logisches Programmieren an Hand von Beispielen"

Copied!
9
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Michael Spenke u n d Christian Beilken, St. Augustin

Zusammenfassung

Es wird PERPLEX vorgestellt, eine Programmierumgebung für Endbenutzer. PERPLEX vereint die Konzepte der logischen Programmierung mit der interaktiven Benutzerschnittstelle von Tabellenkalkulationsprogrammen. Auf diese Weise wird einerseits eine interaktive, inkre- mentelle Form der logischen Programmierung ermöglicht u n d andererseits Funktionalität und A n w e n d u n g s b e r e i c h eines h e r k ö m m l i c h e n T a b e l l e n k a l k u l a t i o n s p r o g r a m m s beachtlich erweitert. B e r e c h n u n g e n u n d Anfragen werden d u r c h C o n s t r a i n t s ü b e r m e h r e r e n Felder formuliert. Neue Prädikate werden durch Vorrechnen von Beispielen definiert, a u s denen Re- geln abgeleitet werden. Dadurch übernehmen konkrete Zwischenergebnisse die Rolle von ab- strakten logischen Variablen. PERPLEX wurde im Rahmen des Verbund-Projektes WISDOM entwickelt u n d ist auf einer Symbolics Lisp Maschine verfügbar.

1. Einleitung

Hoch interaktive, g r a p h i s c h e Benutzerschnittstellen h a b e n d e n Umgang mit S t a n d a r d - anwendungen deutlich vereinfacht. Es besteht aber auch eine große, noch unbefriedigte Nach- frage n a c h Anwendungen, die speziell auf die Bedürfnisse einzelner Benutzer zugeschnitten sind (vgl. Rockart, 1983). Dieser Bedarf k a n n unmöglich durch eine wachsende Zahl von Pro- grammierern gedeckt werden (vgl. Shu, 1985). Daher werden Werkzeuge benötigt, mit denen Endbenutzer ihre eigenen Anwendungen erstellen können.

PERPLEX bietet die Mächtigkeit logischer Programmierung u n t e r der b e w ä h r t e n Benutzer- schnittstelle von Tabellenkalkulationsprogrammen an. Inkrementelle Anfragen werden als natürliche Erweiterungen der Standardfunktionalität eines Tabellenkalkulationsprogrammes eingeführt. An Hand von Beispielen können benutzerdefinierte Funktionen u n d logische Regeln in einheitlicher Weise definiert werden, ohne daß der Benutzer eine neue formale Sprache lernen m u ß .

Ihren Erfolg verdanken Tabellenkalkulationsprogramme u n t e r anderem der Tatsache, daß sich viele Probleme auf natürlicher Weise im Matrixformat darstellen lassen. Noch wichtiger ist, daß die strikte Trennung von Programmier- u n d Testphase aufgehoben ist. Da die Werte von Variablen ständig angezeigt werden, wird die Programmierung zu einer weniger abstrakten Aufgabe: A n s t a t t mit Variablen u n d deren v e r m u t e t e n Werten k a n n der Benutzer mit k o n k r e t e n Zwischenergebnissen arbeiten. Die meisten Fehler werden auf diese Art sofort entdeckt, u n d ein explorativer Programmierstil wird gefördert, da die Auswirkungen von Ände- rungen a n den Eingabewerten oder den Formeln sofort sichtbar werden.

Ein konventionelles Tabellenkalkulationsprogramm stellt allerdings noch keine universelle Programmierumgebung dar, hauptsächlich weil Möglichkeiten fehlen, u m neue Funktionen zu definieren u n d große Programme zu modularisieren (vgl. Arganbright, 1986). Zwar wird versucht, diese Lücke mit Makros zu schließen; dies stellt aber einen Schritt z u r ü c k zu traditionellen Programmiersprachen dar. Daher stellen Makros eine große Barriere für Endbe- nutzer dar: Während Tabellenkalkulationsprogramme sich großer Beliebtheit erfreuen, werden Makros k a u m verwendet. PEPRLEX ermöglicht dagegen einen Übergang z u m Programmieren, ohne d a s Paradigma zu wechseln.

Logische Programmiersprachen wie z.B. Prolog sind stärker problemorientiert u n d leichter erlernbar als prozedurale Sprachen. Außerdem sind sie aufgrund ihrer flexiblen Berech- nungsrichtung ausdrucksstärker als funktionale Programmiersprachen (vgl. Reddy, 1986) und

(2)

können in natürlicher Weise als Datenbankabfragesprachen eingesetzt werden (vgl. Beyer, 1985).

Logische Programmiersprachen sind prinzipiell für die interaktive Nutzung geeignet. Dieses Potential bleibt jedoch weitgehend ungenutzt, solange eine einfache Zeilenschnittstelle Ver- wendung findet. Die interaktive, graphische Benutzungsoberfläche von PERPLEX ermöglicht dem Endbenutzer einen leichten Zugang zu den Möglichkeiten logischer Programmierung.

Van Emden et al. (1985) verwenden ebenfalls eine Matrix, um die Lösungen einer inkrementel- len Prolog-Anfrage anzuzeigen, bieten aber keine Möglichkeit zur Definition benutzerdefinierter Prädikate. In PERPLEX werden Datenbankanfragen in ähnlicher Weise formuliert, wie in Query-by-Example (vgl. Zloof, 1977); unser Konzept geht aber weit über Datenbankanfragen hinaus.

2. Das Berechnungsmodell

Auf den ersten Blick unterscheidet sich PERPLEX nicht von einem herkömmlichen Tabellen- kalkulationsprogramm: Eine Tabelle besteht aus Feldern, die in Zeilen und Spalten angeordnet sind und mit Al, A2, ..., Bl, B2, ... bezeichnet werden. Jedes Feld repräsentiert eine Variable, deren Wert — falls vorhanden — ständig angezeigt wird. Werte können Zahlen, Zeichenketten oder Listen von Werten sein.

2.1 Constraints anstelle von funktionalen Ausdrücken

In einem typischen Tabellenkalkulationsprogramm kann ein Feld entweder eine Konstante oder eine Formel enthalten. Dadurch werden die Felder in Eingabefelder (mit einer Konstanten) und Ausgabefelder (mit einer Formel) unterteilt. In PERPLEX sind Formeln jedoch nicht einem einzelnen Feld zugeordnet, sondern gelten für eine Menge von Feldern.

Dementsprechend werden Formeln nicht als funktionale Ausdrücke angegeben, die einen Wert liefern, sondern als Constraints, die durch die Feldinhalte erfüllt werden sollen. Beispiele für solche Constraints sind:

• Der Wert von Al soll doppelt so groß sein wie der von Bl.

• Der Wert von Al soll gröJ3er sein als der Wert von B1.

• Die Summe von Al, Bl und Cl soll 100 sein.

• Die Person in Al soll der Vorgesetzte der Person in Bl sein.

Die Liste der vom Benutzer eingegebenen Constraints wird neben der Tabelle angezeigt.

Während in herkömmlichen Tabellenkalkulationsprogrammen Ausdrücke mit Hilfe von Funktionen spezifiziert werden, werden Constraints mit Hilfe von Prädikaten formuliert, die keine feste Ein-/Ausgaberichtung vorschreiben. Die Standardsyntax für Constraints ist P ( x i . . xn) , wobei P ein Prädikat ist und x i . . xn Feldnamen oder Konstanten sind. Die Liste der Constraints entspricht in etwa einer Prolog-Anfrage.

A B C D

[ Z D ^

Bild 1: Eine Tabelle mit zwei Constraints 2.2 Evaluierung von Constraints

Aufgabe des Evaluierer ist es, eine Belegung für diejenigen Variablen zu finden, die in Con- straints referenziert werden (und nicht durch eine Konstante gegeben sind), so daß alle Con- straints erfüllt sind. Wenn eine Belegung gefunden wurde, wird der Wert jeder Variable in der Tabelle angezeigt. Jede Belegung stellt eine Lösung für die durch die Constraints definierte Anfrage dar. Im allgemeinen kann es mehrere Lösungen geben, von denen zunächst die erste

Constraints P(C1 A2 D3) Q(D3 C5)

(3)

angezeigt wird. Der Benutzer k a n n d a n n durch die Menge der Lösungen blättern, wobei jeweils eine komplette Variablenbelegung angezeigt wird. Möglicherweise wird jedoch aufgrund wider- sprüchlicher Constraints ü b e r h a u p t keine Lösung gefunden.

Bei der Verwendung von Constraints bleibt offen, ob ein Feld als Ein- oder Ausgabefeld dient.

Daher k a n n m a n den ersten Beispiel-Constraint folgendermaßen verwenden:

• Wenn sowohl Al als a u c h B l als Konstanten gegeben sind, prüft der Evaluierer lediglich, ob die Bedingung erfüllt ist.

• Ist n u r B l gegeben, wird A l durch Verdoppeln von B l ermittelt.

• Ist n u r Al gegeben, wird B l durch Halbieren von A l ermittelt.

• Wenn weder A l noch B l gegeben sind, wird der Constraint ignoriert.

J e d e m Prädikat ist die Menge seiner erlaubten Aufrufmodi zugeordnet. Die Aufrufmodi geben an, welche Parameter gegeben sein m ü s s e n , wenn d a s Prädikat aufgerufen wird. Formal stellt jeder Modus eine Teilmenge der formalen Parameter des Prädikates dar. Falls alle Parameter von wenigstens einem Aufrufmodus gegeben sind, wird der Constraint evaluierbar, das heißt die Werte der übrigen Parameter können berechnet werden. Die Aufrufmodi werden verwendet, u m die Reihenfolge der Evaluierung von Constraints zu bestimmen: Es wird stets der erste noch nicht ausgewertete, evaluierbare Constraint ausgewertet. Die Evaluierung eines Con- s t r a i n t s k a n n weitere Variablen instantiieren, so daß zusätzliche Constraints evaluierbar werden. Wenn keine Constraints m e h r evaluierbar sind, werden die übrigen Constraints vom Evaluierer ignoriert.

Ein Aufrufmodus eines Prädikates wird als regulärer Ausdruck über den Symbolen i n u n d o u t beschrieben. Beispielsweise bedeutet der Aufrufmodus ( i n i n o u t ) des Prädikates Times, daß das Produkt (der letzte Parameter) berechnet werden k a n n , sofern beide Faktoren (die ersten beiden Parameter) gegeben sind. Es m ü s s e n nicht alle Aufrufmodi eines Prädikates explizit angegeben werden, da s t e t s Konstanten für Ausgabeparameter vorgeben werden können.

2.3 Verschiedene Typen von Prädikaten

Bild 2 zeigt einige typische Prädikate mit ihren Aufrufmodi.

Prädikat Less Times

And Member List Concat Substring Employees Copy File Pie Chart

Auf ruf modi (in in) (in in out) (in out in) (out in in) (in in) (out in) (in* out) (out* in) (in in out) (out out in) (in out out out) (out out out out) (in in) (in in in)

Beispiele Less(A4 5) Times(A3 2 A4)

And(true true) Member(A1 [12 3 4 5]) List(1 2 3 4 5 B 1 ) List(A1 A2 A3 [1 2 3]) Concatfin" "put" A3) Concat(A1 A2 "output") Substring("core" 2 3 B4) Employees(A1 A2 A3 A4) Copy File("file1" "file2") Pie Chart("Sales" A2 A4)

Bild 2: Einige typische Prädikate

Es gibt drei verschiedene Arten von Prädikaten, die in gleicher Weise angewendet werden und sich n u r durch ihre zugrundeliegende Implementierung unterscheiden:

• Eingebaute Prädikate

Ein eingebautes Prädikat ist durch eine Menge von Funktionen definiert — eine für jeden Aufrufmodus. Die Eingabeparameter jeder Funktion entsprechen dem zugehörigen Auf- rufmodus. J e d e Funktion liefert eine Lösungsmenge für die Ausgabeparameter. Für den Modus ( i n i n o u t ) bei dem Prädikat Times gibt es beispielsweise eine Funktion, die zwei Zahlen als Argumente h a t und ihr Produkt liefert.

(4)

• Datenbankrelationen

Datenbankrelationen werden durch eine Menge von Tupeln repräsentiert. Sie entsprechen in etwa den Fakten von Prolog.

• Benutzerdefinierte Prädikate

Benutzerdefinierte Prädikate können mit Hilfe von eingebauten Prädikaten, Datenbank- relationen u n d anderen benutzerdefinierten Prädikaten definiert werden. Dies wird später genauer erläutert.

2.4 Rückwärtsberechnungen

Bild 3 zeigt, wie eine einfache Berechnung mit Hilfe von Constraints ausgeführt werden kann.

Constraints Plus(B2 100 C2) Divide(C2 100 C3)

Times(B1 C3 B3) 1 2 3 4

A Basis:

Prozent:

Gesamt:

B 200

14 228

C

114 1.14

Bild 3: Berechnung eines prozentualen Aufschlages mit expliziten Zwischenergebnissen Sobald die drei Constraints definiert sind, k a n n m a n nicht n u r mit verschiedenen Eingabe- werten experimentieren, sondern auch rückwärts rechnen. Wird beispielsweise der Basisbe- trag (Feld Bl) u n d der Gesamtbetrag (B3) angegeben, so wird der Prozentsatz errechnet. Um das Resultat zu finden, m u ß der Evaluierer eine geeignete Evaluierungsreihenfolge für die drei Constraints bestimmen. Wie bereits oben erwähnt, wird stets der erste evaluierbare Con- straint ausgewählt. In u n s e r e m Beispiel k a n n der dritte Constraint sofort evaluiert werden;

dadurch wird der zweite Constraint evaluierbar u n d schließlich auch der erste.

2.5 Syntaktischer Zucker

Da es sehr ungewohnt ist, arithmetische Ausdrücke in Prädikatnotation anzugeben, ist auch die übliche Infixnotation für Constraints zugelassen. Statt der drei Constraints in Bild 3 k a n n m a n also auch kürzer schreiben:

B3 = Bl * (B2 + 100) / 100

Die interne Repräsentation basiert aber nach wie vor auf Constraints (mit Hilfsvariablen), so daj3 Rückwärtsberechnungen weiterhin möglich sind. Man k a n n Prädikate auch in geschach- telten Ausdrücken wie Funktionen benutzen. Dabei wird der letzte Parameter weggelassen u n d als Ergebnis des Funktionsaufrufes geliefert. Zum Beispiel ist

A3 = S i n u s ( A l ) + A2 äquivalent zu

S i n u s ( A l AUX1) Plus(AUXl A2 AUX2)

Equal(AUX2 A3)

Weiterhin k ö n n e n Operatoren wie >, <, a n d , o r u n d n o t b e n u t z t werden, u m entweder Bool'sche Ausdrücke (die t r u e oder f a l s e liefern) oder Constraints (die erfüllt sein müssen) zu definieren. Beispiel: Der Constraint

Al>5 and A2<10 and n o t A3

ist n u r erfüllt, wenn alle drei Bedingungen erfüllt sind. Dagegen wird der Constraint A4 = (Al>5 and A2<10 and n o t A3)

A4 entweder t r u e oder f a l s e zuweisen.

2.6 Mehrfachlösungen

Mehrfachlösungen erhält m a n typischerweise, wenn Datenbankrelationen verwendet werden.

D a t e n b a n k a n f r a g e n k ö n n e n ebenfalls mit Hilfe der b i s h e r b e s c h r i e b e n e n Mechanismen

(5)

formuliert werden. Die folgenden Beispiele basieren auf einer kleinen relationalen Datenbank mit 10 Angestellten (eingeführt durch Zloof, 1977; siehe Bild 4).

Name 1 anderson

henry hoffman Jones lewis long morgan murphy nelson smith

Gehalt 6000 9000 16000 8000 12000 7000 10000 8000 6000 12000

Vorgesetzter murphy smith morgan smith long morgan lee smith murphy hoffman

Abteilung toy toy cosmetics household stationery cosmetics cosmetics household toy stationery

Bild 4: Die Datenbank Employees

Wenn m a n den Constraint Employees (Bl B2 B3 B4) eingibt, liefert der Evaluierer alle Tupel der Datenbank als Lösung. Die Angaben zu dem ersten Angestellten werden in den Feldern B l .. B4 angezeigt u n d die Gesamtzahl der Lösungen erscheint oberhalb der Tabelle. Die anderen Lösungen werden angezeigt, wenn mit Hilfe der Pfeile geblättert wird.

Constraints Employees(B1 B2 B3 B4)

4 H m+ - Solution 1 of 1 0 -

1 2 3 4 5

A B Name: anderson Gehalt: 6000 Vorgesetzter: murphy Abteilung: toy

C

Bild 5: Eine einfache Datenbankanfrage

Speziellere Anfragen können gestellt werden, indem m a n Konstanten vorgibt. Wenn z.B. j o n e s in B l eingetragen wird, ergibt sich eine eindeutige Lösung: Nur die Daten von J o n e s werden angezeigt. Wenn m a n stattdessen 6000 in B2 einträgt, bleiben 2 Lösungen übrig, da es zwei Angestellte gibt, die 6000 $ verdienen.

2.7 Kombinierte Datenbankanfragen

Um komplexe Datenbankanfragen zu formulieren, k a n n m a n zusätzliche Constraints angeben.

Um beispielsweise alle Angestellten zu ermitteln, die mehr als 8000 $ verdienen, fügt m a n den Constraint B2>8000 hinzu u n d erhält 5 Lösungen.

Es k ö n n e n natürlich nicht n u r zusätzliche Restriktionen angegeben werden, sondern m a n k a n n a u c h abgeleitete Informationen berechnen: Um beispielsweise d a s J a h r e s g e h a l t jedes Angestellten zu berechnen, gibt m a n den Constraint C2=B2*12 ein.

Es ist auch möglich zwei Datenbankzugriffe in einer Anfrage zu kombinieren: Angenommen, es sollen alle Angestellten mit demselben Vorgesetzten ermittelt werden. Man beginnt wiederum mit dem Constraint Employees (Bl B2 B3 B4) u n d trägt J o n e s in B l ein, u m zunächst mit einem konkreten Beispiel zu arbeiten. Dadurch wird s m i t h als der Vorgesetzte von J o n e s an- gezeigt u n d durch die Constraints Employees (Cl C2 C3 C4) u n d B3=C3 können alle Ange- stellten ermittelt werden, die ebenfalls Smith als Vorgesetzten haben. Es ergeben sich 3 Lösungen u n d die Kollegen von J o n e s werden in C l angezeigt. Beim Blättern durch die Lösungen fällt auf, daß sich a u c h J o n e s noch u n t e r diesen Kollegen befindet. Um diesen Mangel zu beseitigen, fügt m a n noch den Constraint Bl^Cl hinzu (Bild 6). Zum Schluß k a n n

(6)

m a n noch d a s Beispiel j o n e s a u s B l löschen u n d erhält 10 Paare von Angestellten jeweils mit demselben Vorgesetzten.

* 4

• Solution 1 of 2 - Constraints

Employees(B1 B2 B3 B4) Employees(C1 C2 C3 C4)

B3 = C3 B 1 * C 1

1 2 3 4 5

A Name:

Gehalt:

Vorgesetzter:

Abteilung:

B jones 8000 smith household

C henry 9000 smith toy

Bild 6: "Wer hat denselben Vorgesetzten wie Jones?"

2.8 Inkrementelles Problemlösen

Wie d a s letzte Beispiel gezeigt hat, liegt die Stärke von PERPLEX darin, daß eine interaktive, explorative Vorgehensweise beim Problemlösen unterstützt wird. Der Benutzer m u ß nicht so- fort eine komplette Anfrage formulieren, sondern k a n n sich der Losung schrittweise n ä h e r n u n d dabei auf konkrete Zwischenergebnissse zurückgreifen. Abhängig von den angezeigten Zwischenergebnisssen k a n n er weitere Constraints hinzufügen, u m unerwünschte Lösungen auszuschließen oder existierende Constraints modifizieren falls sie zu restriktiv sind. Die Möglichkeit, auf konkrete Zwischenergebnisse mit der Maus zu zeigen, macht die Verwendung von abstrakten Variablen, dessen Werte m a n sich vorstellen muJ3, überflüssig.

3. Programmieren mit Beispielen

In den bisherigen Beispielen wurde gezeigt, wie m a n existierende Prädikate zum inkrementel- len Problemlösen einsetzt. Neue, benutzerdefinierte Prädikate können a n Hand von Beispielen definiert werden (Programming-by-example).

Die Grundidee ist hier, zunächst die Lösung für ein Problem a n Hand eines typischen Beispiels exemplarisch in dem bereits beschriebenen explorativen Stil zu erarbeiten u n d anschließend die relevanten Parameter des Problems zu identifizieren. Durch die während des Problem- lösungsprozesses festgelegten Constraints wird eine bestimmte Relation zwischen den Eingabe- u n d A u s g a b e p a r a m e t e r n definiert. Falls diese Relation von genereller Bedeutung ist u n d voraussichtlich a u c h in anderen Z u s a m m e n h ä n g e n gebraucht wird, k a n n m a n ein n e u e s , benutzerdefiniertes Prädikat einführen, indem m a n einen Namen für die Relation vergibt u n d die relevanten Parameter bezeichnet.

Fallunterscheidungen k ö n n e n spezifiziert werden, indem mehrere Beispiele zu demselben Prädikat gegeben werden, a u s denen d a n n je eine Regel abgeleitet wird. Dadurch ist es sogar möglich, rekursive Prädikate zu definieren.

3.1 Ein Beispiel für ein Beispiel

Angenommen, wir h a b e n wiederholt das Problem, einen Teil eines Wortes durch eine andere Zeichenkette zu ersetzen. Als Demonstrationsbeispiel versuchen wir "act" in "interaction" durch

"sect" zu ersetzen. Die Grundidee ist, das Wort "interaction" in "inter", "act" u n d "ion" zu zer- legen u n d d a n n den Präfix, den neuen Infix u n d den Postfix zu konkatenieren.

Zunächst tragen wir die Beispielkonstanten ein und beschriften die Felder entsprechend ihrer Bedeutung (Bild 7). Sodann verwenden wir d a s Prädikat S u b s t r i n g , u m Anfangs- u n d End- position von "act" in "interaction" zu bestimmen und erhalten 6 u n d 8. Als nächstes versuchen wir, den gesuchten Präfix als Anfangsstück von "interaction" von 1 bis 6 zu erhalten. Sobald wir aber d a s Resultat "intera" sehen, stellen wir fest, daß u n s ein Fehler unterlaufen ist: Die Endposition von "inter" ist u m 1 kleiner als Anfangsposition von "act" u n d der letzte Constraint muj3 d e m e n t s p r e c h e n d modifiziert werden. Um den Postfix "ion" b e s t i m m e n zu k ö n n e n , benötigen wir z u n ä c h s t die Gesamtlänge von "interaction", die mit Hilfe d e s Prädikates

(7)

S t r i n g - l e n g t h ermittelt werden kann. Schließlich konkatenieren wir die 3 Teilstücke zu dem Wort "intersection".

Packages Constraints Predicates

Add List All-Solutions

Bar Chart Between Conc»t3 Display Solutions

Oivlde Employees

Qreater Integer-multiply

Length

Maximum Minimum Not-Equal Pie Chart Preisliste similar strings

String-length Subset Substitut«

Substring Wildcard-match

ram

Cor

B2i-S«ki B«i.Saks Bi.-B.iklt

• • » C M

Command istraints

trir.«<B1 02 0 rla«(B1 1 02 r Ut( B 1 01*1

• • t ! ( 8 « BS B

Rerplex

Sheet Select Edit Format Opti

• [ • X U E a z a i Z l B B H O H <predlcate>(<cell> ...

E ^ H > S u b s t i t u t e ^ B2 B5

<cell>) 38)

> Unique Solution

p ^ B Substitute

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 1 22 23 24

A B C

Substring:

Prefix:

Substitute:

Postfix:

Result:

i n t e r a c t i o n act inter sect ion intersection

Length: 11 Start: 6 End: 8

-_

ms Special

D

0 1 / 8 5 / 8 9 1 7 : 1 6 : 5 ? Keyboard HFILE serving UIS0GN1-1

Bild 7: Exemplarische Lösung des Ersetzungsproblems (Bildschirmabzug)

Wir können nun mit anderen Wörtern experimentieren, um festzustellen, ob unsere Lösung allgemeingültig ist. Sobald wir uns davon überzeugt haben, definieren wir ein neues Prädikat S u b s t i t u t e mit den Parametern S t r i n g , S u b s t r i n g , S u b s t i t u t e und R e s u l t , so daj3 S u b s t i t u t e ( " i n t e r a c t i o n " " a c t " "sect" " i n t e r s e c t i o n " ) gilt. Dazu wählen wir das Kommando Define Rule, tippen den Namen des neuen Prädikates und klicken mit der Maus auf die relevanten Parameterfelder. Auf diese Weise haben wir dem System mitgeteilt, daJ3 die Parameter des neu definierten Prädikates S u b s t i t u t e in der gleichen Relation stehen sollen wie die bezeichneten Felder.

Mit dem neuen Prädikat können nun zu dem Demonstrationsbeispiel analoge Ersetzungs- probleme gelöst werden: Zu gegebenem String, Substring und S u b s t i t u t e wird der Aus- gabeparameter Result geliefert. Darüberhinaus sind aber noch weitere Verwendungen, ins- besondere andere Aufrufmodi, für das neue Prädikat möglich:

Substitute("interaction" "i"

"interactoon".

S u b s t i t u t e ( " i n t e r a c t i o n " A2

"interaction" durch "*".

' A4) liefert die zwei Lösungen "onteraction" und A4) ersetzt jedes der 78 möglichen Teilworte von S u b s t i t u t e ( " i n t e r a c t i o n " A2 "sect" " i n t e r s e c t i o n " ) findet heraus, daJ3 "act" er- setzt werden muß.

S u b s t i t u t e ( " i n t e r a c t i o n " A2 A3 " i n t e r s e c t i o n " ) liefert alle 36 möglichen Umfor- mungen von "interaction" nach "intersection".

(8)

3.2 Vorteile des P r o g r a m m i e r e r mit Beispielen

Das obige Beispiel zeigt die wichtigsten Vorteile unseres Ansatzes:

• Es muj3 keine neue Sprache erlernt werden, u m neue Prädikate definieren zu können. Das Programmieren allgemeiner Lösungen für eine Problemklasse ist k a u m schwieriger als das Lösen eines einzelnen, konkreten Problems. Der Benutzer m u ß nicht einmal von Anfang a n planen, ein n e u e s Prädikat zu definieren. Wenn er eine allgemeingültige Lösung für ein Pro- blem erarbeitet hat, k a n n er sich noch nachträglich entscheiden, ein n e u e s Prädikat zu de- finieren, indem er einfach die relevanten Parameter identifiziert. Auf diese Weise k a n n der von der Tabellenkalkulation gewohnte explorative Arbeitsstil auch bei der Programmierung beibehalten werden.

• Die zulässigen Aufrufmodi eines neuen Prädikates werden automatisch errechnet. So k a n n der Benutzer sofort feststellen, ob sein Beispiel im gewünschten Umfang generalisiert wer- den konnte. Oftmals k a n n m a n mit einem sehr einfachen Beispiel arbeiten, wo m e h r Para- meter vorgegeben sind als nötig u n d sich daher eindeutige Lösungen ergeben u n d dennoch den allgemeinen Fall implementieren, wo weniger Parameter vorgegeben sind u n d Mehr- fachlösungen auftreten. Ebenso k a n n oft eine Vorwärtsberechnung demonstriert werden, u n d d a s System entdeckt die Möglichkeit, mit dem n e u e n Prädikat a u c h rückwärts zu rechnen. Auf diese Weise stellt sich die logische Programmierung als natürliche Erweiterung der funktionalen Programmierung dar.

• Da zu jeder Regel die Tabelle mit dem Originalbeispiel abgespeichert wird, können existie- rende Regeln in natürlicher Weise editiert werden: Die Tabelle mit dem Beispiel k a n n mit den ganz normalen Operationen modifiziert werden.

4. Zusammenfassung

Es wurde gezeigt, daß die Konzepte der logische Programmierung in natürlicher Weise mit der populären Benutzerschnittstelle von Tabellenkalkulationsprogrammen kombiniert werden können. Auf diese Weise k a n n der explorative Arbeitsstil, der durch die direkte Anzeige von Zwischenergebnissen in einer Tabelle gefördert wird, auch bei inkrement eilen Anfragen und sogar bei der Definition von n e u e n Prädikaten a n Hand von Beispielen beibehalten werden.

PERPLEX wurde erfolgreich auf einer Symbolics Lisp Maschine implementiert (siehe Spenke u n d Beilken, 1988). Erste Resultate einer Interaktionsanalyse (vgl. G r ü n s t , 1988) von PERPLEX im Vergleich zu EXCEL (Campbell, 1987) haben gezeigt, daß d a s Programmierpara- digma zwar für den Endbenutzer geeignet ist, aber die Benutzer Schwierigkeiten mit der Schnittstelle der Lisp Maschine h a b e n . Zur Zeit wird PERPLEX auf einem Macintosh reimplementiert.

Literatur

Arganbright, Deane E. (1986): Mathematical Modeling with Spreadsheets, ABACUS, 3(4), S.

18-31.

Attardi, Giuseppe; Simi, Maria (1982): Extending the Power of Programming by Example, in: J . O . Limb (Hrsg.): SIGOA Conference on Office Information Systems, Philadelphia, PA, S.

52-66.

Bauer, Michael A. (1979): Programming by Examples, Artificial Intelligence 12, S. 1-21.

Beyer, Rudolf (1985): Database Technology for Expert Systems, in: Internationaler GI- Kongreß 85: "Wissensbasierte Systeme", München, Gl Tagungsband, Informatik Fachberichte 112, Springer-Verlag, S. 1-16.

Borning, Alan (1981): The Programming Language Aspects of ThingLab, a Constraint- Oriented Simulation Laboratory, ACM TOPLAS, 3(4), S. 353-387.

Campbell, M. (1987): Excel Macro Treasury, Macworld 11/87, S. 122-125.

Colmerauer, Alain (1987): Opening the Prolog III Universe, BYTE, 8 / 8 7 , S. 177-158.

Eisenstadt, Marc; Hasemer, Tony; Kriwaczek, Frank (1985): An Improved User Interface for PROLOG, In: B. Shackel (Hrsg.): Human-Computer Interaction—INTERACT '84, Elsevier Science Publishers B.V., S. 385-389.

(9)

van Emden, M.H.; Ohki, M.; Takeuchi, A. (1985): Spreadsheets with Incremental Queries as a User Interface for Logic Programming, ICOT Technical Report, TR-144, 1 0 / 8 5 . Fischer, Gerhard; Rathke, Chrsitian (1988): Knowledge-Based Spreadsheets, Proceedings of

AAAI-88, 7th National Conference on Artificial Intelligence, St. Paul, MI, 8 / 8 8 .

Grünst, Gernoth G. (1988): Reconstructing Cooperative Advising—Interaction Analysis as a Research Tool for t h e Development of Intelligent Assistants, interner Bericht, GMD.

Halbert, Daniel C. (1984): Programming by Example, PhD Thesis, Computer Science Division, Dept. of EE&CS, University of California, Berkeley.

Kriwaczek, F r a n k (1986): LogiCalc—A PROLOG Spreadsheet, in: Bob Kowalski, F. Kriwaczek:

Logic Programming, Addison-Wesley, S. 105-117.

Lassez, C. (1987): Constraint Logic Programming, BYTE 8 / 8 7 , S. 171-176.

Leler, Wm (1988): Constraint Programming Languages, Their Specification and Generation, Addison-Wesley.

Lieberman, Henry; Lieberman, Carl (1980): A Session With TINKER: Interleaving Program Testing With Program Design, Conference Record of the 1980 LISP Conference, Stanford University, S. 90-99.

Myers, Brad A. (1986): Visual Programming, Programming by Example, and Program Visualization: A Taxonomy, in: Marilyn Mantei, Peter Orbeton (Hrsg.): H u m a n Factors in Computing Systems—III, Proceedings of the CHI '86 Conference, Boston, MA, S. 59-66.

Ohki, M.; Takeuchi, A.; Furukawa, K. (1986): A Framework for Interactive Problem Solving based on Interactive Query Revision, ICOT Technical Report, TR-188.

Piersol, Kurt W. (1986): Object oriented Spreadsheets: The Analytic Spreadsheet Package, ACM OOPSLA Proceedings, S. 385-390.

Reddy, Uday S. (1986): On the Relationship between Logic and Functional Languages, in:

Doug De Groot, Gary Lindstrom (Hrsg.): Logic Programming, Functions, Relations and Equations, Prentice Hall, S. 3-35.

Rubin, Robert V.; Golin, Eric J.; Reiss, Steven P. (1985): ThinkPad: A Graphical System for Programming by Demonstration, IEEE Software, 3 / 8 5 , S. 73-79.

Rockart, J o h n F.; Flannery, Lauren S. (1983): The Management of End User Computing, Communications of the ACM, 26(10), 1 0 / 8 3 , S. 776-784.

Shu, Nan C. (1985): FORMAL: A Forms-Oriented, Visual-Directed Application Development System, IEEE Computer, 8 / 8 5 , S. 38-49.

Spenke, Michael: Beilken, Christian (1988): The Implementation of PERPLEX: A

Spreadsheet Interface for Logic Programming, WISDOM Forschungsbericht FB-GMD-88- 29, GMD, 1 1 / 8 8 , 86 Seiten.

S u s s m a n , Gerald Jay; Steele, Guy Lewis J r (1980).: CONSTRAINTS—A Language for Expressing Almost-Hierarchical Descriptions, Artificial Intelligence 14, S. 1-39.

Zloof, Moshe M.; de Jong, S. Peter (1977): The System for Business Automation (SBA):

Programming Language, Communications of the ACM 20(6), S. 385-396.

Zloof, Moshe M. (1977): Query-by-Example: a data base language, IBM System J o u r n a l 16(4), S. 324-343.

Zloof, Moshe M. (1981): QBE/OBE: A Language for Office and Business Automation, IEEE Computer 14(5), S. 13-22.

Michael Spenke u n d Christian Beilken

Gesellschaft für Mathematik u n d Datenverarbeitung mbH Postfach 1240

5205 St. Augustin 1 Telefon: 02241 14-2642

email: spenke@gmdzi.uucp bzw. cici@gmdzi.uucp

Referenzen

ÄHNLICHE DOKUMENTE

In einer vegetarischen Variante kann man statt Fleisch Räuchertofu verwenden oder einfach das Gemüse mit Mais oder weißen Bohnen ergänzen..

Inhalt: Carolina Alba redet mit dem jungen, spanischen Regisseur Jonás Trueba über den Sommer in Madrid und seinen neuesten Film ‘La virgen de agosto’, der im August 2019 in die

Rispetto allo stesso edificio senza raffred- damento attivo, il grado di autoconsumo è superiore del 6 % e il grado di autarchia del 4 %. A causa del raffreddamento l’immissio- ne

Questo orologio da polso può essere utilizzato dai bambini di età superiore agli otto anni e da persone con ridotte capacità fisiche, sensoriali e mentali, o prive di esperienza

Pacchetto cucina/bagno, condotte, aerazione controllata Pacchetto riscaldamento, acqua calda, energie rinnovabili. Sostituzione

(D, v, ⊥) heißt vollst¨ andige partielle Ordnung (complete partial ordering, cpo), wenn v eine partielle Ordnung (also reflexiv, transitiv und antisym- metrisch) auf D ist mit

Il nostro servizio è pure impegnato nel trovare nuovi impulsi per le campagne membri, alio scopo non solo di rendere più compatto il numéro dei soci nelle sezioni, ma soprattutto e

Arianna Dalessi: Occorre fare una suddivisione non solo tra scuole del settore medicotecnico e scuole del settore curante, ma tra formazione a livello di certificato e