Esther König / Roland Seiffert Grundkurs P R O L O G für Linguisten A / \ V."]" / L / \ ASTIOERENOENSCHAFT \ DER UNIVERSITÄT DES SAAULANDES © 3 3 3 3 öto£) flSS 'Ml äxn&m&ä^teßi Us? Univarsitäi dos Saariandes Compuicîiinguistik Francke Verlag Tübingen Esther König ist Promotionsstipendiatin der IBM Deutschland und wissenschaftliche Mitarbeiterin am Institut für Maschinelle Sprachverarbeitung der Universität Stuttgart im Rahmen des IBM-Forschungsprojektes L I L O G („Linguistische und Logische Methoden"). Studium der Romanistik, Germanistik, Informatik und Linguistik an der Universität Stuttgart, Diplom in Informatik. Hauptarbeitsgebiete: Parsingverfahren, Zusammenhang von Parsing und Theorembeweisen. Roland Seiffert ist wissenschaftlicher Mitarbeiter am Institut für wissensbasierte Systeme der IBM Deutschland und arbeitet dort im Rahmen des LILOG-Projektes. Studium der Informatik und Linguistik an der Universität Stuttgart, Diplom in Informatik. Hauptarbeitsgebiete: große Softwaresysteme im P R O L O G , Implementierungsaspekte von Unifikationsgrammatiken. Inhaltsverzeichnis Vorwort I 1 9 Grundbegriffe H Einführung 13 1.1 PROLOG-Programmierung 14 C I P - T i t e l a u f n a h m e der Deutschen Bibliothek 1.2 Fakten, Regeln und Anfragen 15 König, Esther: Grundkurs PROLOG für Linguisten / Esther König ; Roland Seiffert. Tübingen : Francke, 1989 ( U T B für Wissenschaft: Uni-Taschenbücher ; 1 5 2 5 ) ISBN 3 - 7 7 2 0 - 1 7 4 9 - 5 1.3 Übungen 2 N E : Seiffert, Roland:; U T B für Wissenschaft / Uni-Taschenbücher © 1989 • A. Francke Verlag GmbH Tübingen Dischingerweg 5 • D - 7 4 0 0 Tübingen 5 Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwendung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Das gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. 3 4 '• • 20 Strukturen 2 2.1 Atomare Strukturen 24 2.2 Komplexe Strukturen 25 2.3 Variable Strukturen 26 2.4 Übungen 27 3 Unifikation 2 3.1 Beispiele 32 3.2 Übungen Beweisverfahren 3 9 4 ^ 3 Illustrationen: Eckardt Wolf, Karlsruhe Einbandgestaltung: A. Krugmann, Stuttgart Druck: Guide-Druck GmbH, Tübingen • Verarbeitung: Braun + Lamparter, Reutlingen Printed in Germany 4.1 Beweisverfahren und Unifikation 39 4.2 Backtracking 41 4.3 Ablaufprotokoll 4.4 ISBN 3 - 7 7 2 0 - 1 7 4 9 - 5 4.5 4 5 Zusammenfassung 4 ^ Übungen 4 ^ INHALTSVERZEICHNIS 6 5 6 7 II 8 9 Rekursion 4 5.1 50 Die Abbruchbedingung 7 INHALTSVERZEICHNIS 11 Eingebaute Prädikate 9 11.1 Ein- und Ausgabe 133 • • • 135 5.2 D e r rekursive Aufruf 52 11.2 Kontrolle 139 5.3 Beispiel: Wegsuche 52 11.3 Meta-Programmierung 145 5.4 Übungen 54 1 1 . 4 Sonstiges 155 1 1 . 5 Beispiel 158 11.6 Zusammenfassung 161 11.7 Übungen 162 Listen 5 7 6.1 Notation 57 6.2 Der Listenkonstruktor 58 6.3 Rekursive Listenverarbeitung 60 6.4 Übungen 65 Programmiertechnik 69 7.1 E i n Beispiel 70 7.2 Programmentwurf-Richtlinien 79 7.3 Zusammenfassung 84 7.4 Übungen 85 Linguistische Anwendungen Syntaxanalyse 89 Kontextfreie Grammatiken 89 8.2 Parsing 8.3 Übungen Definite Clause G r a m m a r s 97 100 103 9.1 Aufbau der Konstituentenstruktur 107 9.2 Nur kontextfrei? 111 9.3 Erweiterungen 113 9.4 Übungen 114 10 Deutsch statt P R O L O G 10.1 Sprachanalyse 117 119 1 0 . 2 Hilfsmittel 123 10.3 129 Generierung 10.4 Zusammenfassung 131 10.5 Übungen 132 165 A Lösungen 173 B Glossar 189 Literaturverzeichnis 87 8.1 12 E i n kleines D i a l o g s y s t e m ; 193 Vorwort P R O L O G s t e h t für „ P r o g r a m m i e r e n in Logik" und wurde bereits 1 9 7 2 zur Darstellung linguistischer B e s c h r e i b u n g e n a u f d e m C o m p u t e r e n t w i c k e l t . D o c h e r s t i n d e n l e t z t e n J a h r e n r ü c k t e es in d e n B r e n n p u n k t des I n t e r e s s e s v o n I n f o r m a t i k e r n u n d L i n g u i s t e n . D i e s e s B u c h n i m m t d i e T r a d i t i o n v o n P R O L O G als B e s c h r e i b u n g s s p r a c h e für linguistische P h ä n o m e n e wieder a u f u n d bietet Geisteswissenschaftlerinnen, insbesondere Linguistinnen, eine E i n f ü h r u n g in diese P r o g r a m m i e r s p r a c h e . D a b e i w e r d e n k e i n e form a l e n V o r k e n n t n i s s e u n d keine E r f a h r u n g e n m i t a n d e r e n Pro- g r a m m i e r s p r a c h e n v o r a u s g e s e t z t . E t w a s V e r t r a u t h e i t m i t linguis t i s c h e n F r a g e s t e l l u n g e n ist j e d o c h n ü t z l i c h . D u r c h die A u s w a h l l i n g u i s t i s c h e r B e i s p i e l e , i n s b e s o n d e r e i m z w e i t e n Teil des B u c h e s , k ö n n t e es a b e r a u c h als E i n f ü h r u n g o d e r e r s t e r U b e r b l i c k ü b e r die Computerlinguistik für I n f o r m a t i k e r i n n e n dienen. D e r e r s t e Teil des B u c h e s f ü h r t i n d i e G r u n d k o n z e p t e in die A r b e i t s w e i s e v o n P R O L O G ein. D a z u gehören und Struktu- r e n , U n i f i k a t i o n v o n S t r u k t u r e n , die E r l ä u t e r u n g des P R O L O G B e w e i s v e r f a h r e n s u n d die V e r w e n d u n g v o n R e k u r s i o n . D e r L i s t e n v e r a r b e i t u n g w u r d e a u f g r u n d i h r e r B e d e u t u n g ein eigenes K a p i t e l g e w i d m e t . D e n A b s c h l u ß d e s e r s t e n Teils b i l d e t ein K a p i t e l ü b e r P r o g r a m m i e r t e c h n i k , in d e m grundsätzliche T i p s zur E r s t e l l u n g von P R O L O G - P r o g r a m m e n gegeben werden. I m z w e i t e n Teil e r f o l g t e i n e V e r t i e f u n g a n h a n d einiger linguistisch interessanter Fragestellungen. D a b e i wird ausführlich auf d i e s y n t a k t i s c h e A n a l y s e v o n S ä t z e n u n d die K o n s t r u k t i o n sem a n t i s c h e r R e p r ä s e n t a t i o n e n e i n g e g a n g e n . I m K a p i t e l ü b e r eingebaute Prädikate werden Möglichkeiten zur Ein- und Ausgabe, zur Ablaufkontrolle u n d zur M e t a - P r o g r a m m i e r u n g vorgestellt. VORWORT 10 I m l e t z t e n K a p i t e l zeigt ein kleines D i a l o g s y s t e m w i e v e r s c h i e d e n e , i m z w e i t e n Teil entwickelte P r o g r a m m e sinnvoll m i t e i n a n d e r zu einem recht umfangreichen System verbunden werden können. Dieses B u c h entstand aus einem Manuskript der A u t o r i n n e n f ü r d i e P R O L O G - K u r s e für L i n g u i s t i n n e n , d i e i m S o m m e r s e m e - Teil I ster 1 9 8 7 und Wintersemester 1 9 8 7 / 8 8 von den beiden A u t o r i n n e n a m I n s t i t u t für Maschinelle S p r a c h v e r a r b e i t u n g a n der U n i v e r s i t ä t S t u t t g a r t g e h a l t e n w u r d e n . Die K u r s e w a r e n jeweils e i n w ö c h i g e K o m p a k t k u r s e . D a s vorliegende B u c h k ö n n t e a b e r a u c h a l s M a t e r i a l f ü r e i n e n z w e i s t ü n d i g e n K u r s ü b e r ein S e m e s t e r d i e n e n . D i e } K a p i t e l e n t s p r e c h e n d a n n in e t w a z w e i s t ü n d i g e n U n t e r r i c h t s e i n - j heiten. Grundbegriffe >* G r o ß e r W e r t w u r d e a u f viele a u s f ü h r l i c h e B e i s p i e l e u n d Ü b u n - | g e n g e l e g t . D e s h a l b eignet sich dieses B u c h d u r c h a u s a u c h z u m ! Selbststudium. ' T r o c k e n s c h w i m m e n ist f ü r d a s E r l e r n e n e i n e r Programmier- s p r a c h e selten nützlich. W e r das B u c h d u r c h a r b e i t e n s o l l t e sich Z u g a n g zu e i n e m R e c h n e r a r b e i t s p l a t z s a m t möchte, < PROLOG- S y s t e m v e r s c h a f f e n . Alle B e i s p i e l e h a l t e n s i c h a n d e n d e facto S t a n d a r d von P R O L O G , das sogenannte „ E d i n b u r g h - P R O L O G " . j Unser Dank geht an Dr. Claus-Rainer Rollinger, Prof. D r . H a n s U s z k o r e i t u n d P r o f . D r . C h r i s t i a n R o h r e r , die u n s e r m u t i g t h a b e n , - d a s K u r s m a n u s k r i p t in ein B u c h u m z u s e t z e n ; a n d i e T e i l n e h m e r i n n e n d e r K u r s e , die bei u n s e r e n d i d a k t i s c h e n G e h v e r s u c h e n kritisch mitarbeiteten; an das Institut für wissensbasierte ; Systeme d e r I B M D e u t s c h l a n d , d a s u n s die A r b e i t s m i t t e l z u m E r s t e l l e n ,j d i e s e s B a n d e s z u r V e r f ü g u n g stellte; a n K o l l e g i n n e n f ü r d i e kri- 1 tische Durchsicht des M a n u s k r i p t e s ; a n E c k a r d t W o l f f ü r s e i n e Anti-Streß-Ülustrationen; £ a n K a r i n Seiffert u n d C l a u s B a u m e r , I die unser beider Begeisterung für P R O L O G geduldig e r t r a g e n . Januar 1989 \ Esther König J R o l a n d Seiffert 1 Kapitel 1 Einführung délirant logici A s t e r i x : Die Logiker Seit v o r w e n i g e n J a h r e n J a p a n P R O L O G z u m z e n t r a l e n B e s t a n d t e i l seines e h r g e i z i g e n P r o j e k t e s „Fifth p u t i n g S y s t e m s " g e m a c h t h a t , findet d i e s e Generation Com- Programmiersprache p l ö t z l i c h e i n e r a s e n d e V e r b r e i t u n g . Die I d e e d e s „ P r o g r a m m i e r e n s in Logik" - d a h e r d e r N a m e P R O L O G - soll i n a l l e n B e r e i c h e n d e r K ü n s t l i c h e n I n t e l l i g e n z f o r s c h u n g zu g r o ß e n F o r t s c h r i t t e n f ü h r e n . Typische Einsatzgebiete für P R O L O G sind h e u t e : • Expertensysteme • automatisches Beweisen • maschinelle Übersetzung • natürlichsprachlicher Zugang zu D a t e n b a n k e n oder E x p e r tensystemen • S y s t e m e zur Entwicklung von G r a m m a t i k e n für natürliche Sprache • Intelligente T e x t v e r a r b e i t u n g • Dialogsysteme • textverstehende Systeme KAPITEL 14 1. EINFÜHRUNG 1.2. FAKTEN, In m a n c h e n dieser A n w e n d u n g s b e r e i c h e , z . B . bei d e r m a s c h i - REGELN UND n e l l e n Ü b e r s e t z u n g , gibt es b e r e i t s P r o g r a m m e , die k o m m e r z i e l l Wissensbasis e i n g e s e t z t w e r d e n . A n d e r e B e r e i c h e , wie z . B . T e x t v e r s t e h e n , s i n d • Fakten n o c h i m S t a d i u m der Grundlagenforschung. • Regeln ANFRAGEN 15 problemabhängig P R O L O G ist w e s e n t l i c h ä l t e r als m a n ü b l i c h e r w e i s e v e r m u t e t . B e r e i t s 1972 w u r d e der erste P R O L O G - I n t e r p r e t e r an der Univ e r s i t ä t v o n A i x - M a r s e i l l e entwickelt. Die w i c h t i g s t e n N a m e n , die h i e r z u n e n n e n s i n d , s i n d C o l m e r a u e r , K o w a l s k i u n d R o u s s e l . Ziel Inferenzmaschine d e r d a m a l i g e n E n t w i c k l u n g e n w a r e i n e P r o g r a m m i e r s p r a c h e , die problemuwabhängig gleichzeitig zur Sprachanalyse und zur Implementierung eines F r a g e b e a n t w o r t u n g s v e r f a h r e n s geeignet w a r . Abbildung 1.1: Modell der 1.1 PROLOG-Programmierung W a s weiß ich ü b e r d a s g e g e b e n e P r o b l e m ? In einer klassischen P r o g r a m m i e r s p r a c h e wie z . B . P A S C A L s t e h t ein P r o g r a m m a u s e i n e r F o l g e v o n Anweisungen oder tun soll. I n e i n e m P r o g r a m m w i r d also g e n a u die P r o z e d u r z u r L ö s u n g a u c h prozedurale Die zentrale Sprachen Programmiersprachen. F r a g e bei d e r E r s t e l l u n g eines Welche Fakten gelten? be- Befeh- len, d i e S c h r i t t f ü r S c h r i t t e x a k t festlegen, w a s d e r C o m p u t e r eines Problems beschrieben; deshalb nennt m a n diese PROLOG-Programmierung PASCAL-Pro- g r a m m e s lautet also: Welche Gesetzmäßigkeiten gelten? A n s c h l i e ß e n d m u ß dies alles n u r n o c h in F o r m l o g i s c h e r F o r m e l n formuliert werden, eine geeignete A n f r a g e gestellt d a n n ist es d i e A u f g a b e des P R O L O G - S y s t e m s , Lösung zu werden und den W e g zur finden. E s d a r f n i e m a n d e n e r s c h r e c k e n , d a ß j e t z t s o viel v o n „logischen F o r m e l n " u n d „ b e w e i s e n " d i e R e d e w a r . E s ist a b s o l u t n i c h t nötig, ein tiefes V e r s t ä n d n i s f ü r d i e P R O L O G z u g r u n d e liegen- W a s m u ß ich tun, u m d a s g e g e b e n e P r o b l e m z u l ö s e n ? ' I n P R O L O G d a g e g e n b e d e u t e t P r o g r a m m i e r e n d a s Erstellen den l o g i s c h e n P r o b l e m e zu h a b e n , u m P r o g r a m m e e n t w i c k e l n z u ei- k ö n n e n . W i r w e r d e n dies a n d e n e i n f ü h r e n d e n B e i s p i e l e n i n d e n g e n a n n t . In d i e s e r W i s s e n s - n ä c h s t e n A b s c h n i t t e n s o f o r t s e h e n . A l l e r d i n g s g i b t es einige P r o - b a s i s w i r d alles, w a s d e r P r o g r a m m i e r e r ü b e r die E i g e n s c h a f t e n b l e m e bei d e r P R O L O G - P r o g r a m m i e r u n g , die m a n n u r v e r s t e h e n v o n Objekten einer anwendungsbezogen gewählten Miniwelt u n d kann, w e n n m a n fundierte Kenntnisse der Prädikatenlogik besitzt. ü b e r i h r e B e z i e h u n g e n u n t e r e i n a n d e r weiß, in F o r m v o n I m R a h m e n e i n e r E i n f ü h r u n g spielt dies a l l e r d i n g s keine R o l l e . ner Wissensbasis, Formeln oft a u c h Datenbasis logischen spezifiziert. N a c h d e m die W i s s e n s b a s i s gefüllt i s t , b e s t e h t d i e A u f g a b e des P r o g r a m m i e r e r s n u n i m Stellen von Anfragen d a s P R O L O G - S y s t e m . J e t z t w i r d die Inferenzmaschine an aktiv. Die a n d a s S y s t e m g e s t e l l t e A n f r a g e ist n ä m l i c h w i e d e r n u r e i n e logis c h e F o r m e l u n d die A u f g a b e d e r I n f e r e n z m a s c h i n e ist e s , e i n e n Beweis f ü r diese F o r m e l z u finden. Die zentralen F r a g e n für den P R O L O G - P r o g r a m m i e r e r also: 1.2 Fakten, Regeln und Anfragen Die S y n t a x v o n P R O L O G ist s e h r e i n f a c h . E s g i b t n u r drei A r t e n von A u s d r ü c k e n in e i n e m P R O L O G - S y s t e m : Fakten, sind Anfragen. Regeln und A u s F a k t e n u n d R e g e l n wird die W i s s e n s b a s i s aufge- baut; A n f r a g e n werden d e m S y s t e m als A u f g a b e n gestellt. F a k t e n KAPITEL 16 u n d R e g e l n b e z e i c h n e t m a n a u c h als Axiome. 1. EINFÜHRUNG A x i o m e s i n d in d e r L o g i k F o r m e l n , v o n d e n e n m a n v o r a u s s e t z t , d a ß sie w a h r s i n d . A l l e A u s s a g e n in P R O L O G w e r d e n i n d e r b e s o n d e r s F o r m d e r Klauseln einfachen formuliert. F ü r Prädikatenlogikexperten: In 1.2. FAKTEN, REGELN 17 ANFRAGEN hund(fido). A u ß e r d e m w i s s e n w i r , d a ß G e r d d e r V a t e r v o n G i t t e u n d Uli ist. In P R O L O G k ö n n e n w i r d a s s o f o r m u l i e r e n : Klauselform werden Formeln ohne explizite A n g a b e von Q u a n t o - vater(gerd,gitte). ren ausgedrückt. Der Existenzquantor wird durch Skolemisierung vater(gerd.uli). e l i m i n i e r t u n d alle V a r i a b l e n in einer K l a u s e l s i n d i m p l i z i t all- UND D i e B e d e u t u n g des S y m b o l s v a t e r ist P R O L O G n a t ü r l i c h u n b e - quantifiziert. A l s e i n f ü h r e n d e s Beispiel wollen w i r W i s s e n ü b e r d i e F a m i l i e M a i e r in e i n e r P R O L O G - W i s s e n s b a s i s d a r s t e l l e n . F a m i l i e M a i e r ist die T r a u m f a m i l e u n s e r e s B u n d e s f a m i l i e n m i n i s t e r i u m s . Sie b e s t e h t a u s e i n e m glücklichen E l t e r n p a a r , zwei K i n d e r n u n d e i n e m H u n d . Dies alles u n d n o c h viel m e h r w o l l e n wir in P R O L O G ausdrücken. kannt. W i r h ä t t e n genauso schreiben können x0815(gerd,gitte). x0815(gerd,uli). und uns merken, daß x 0 8 1 5 für uns „ i s t - V a t e r - v o n " bedeutet. E b e n s o ist es m i t d e r R e i h e n f o l g e d e r A r g u m e n t e . E s ist n u r u n s e r e Interpretation der Fakten, daß v a t e r ( g e r d , u l i ) bedeutet „Gerd ist d e r V a t e r v o n U l i " u n d n i c h t u m g e k e h r t „ U l i ist d e r V a t e r v o n G e r d " . W i r m ü s s e n also die B e d e u t u n g der P r ä d i k a t e u n d ihrer A r g u m e n t e z u A n f a n g f e s t l e g e n u n d sie d a n n i m m e r g e n a u s o v e r w e n d e n . E s ist d e s h a l b e m p f e h l e n s w e r t , i m e i n e n Kommentar PROLOG-Programm e i n z u f ü g e n , d e r bei d e r E i n f ü h r u n g e i n e s P r ä d i - k a t e s i m K l a r t e x t a u s s a g t , w a s g e m e i n t ist. E i n Kommentar ist ein b e l i e b i g e r T e x t i n e i n e m Programm, d e r b e s o n d e r s g e k e n n z e i c h n e t ist u n d v o n d e m P R O L O G weiß, d a ß e r lediglich eine I n f o r m a t i o n f ü r d e n L e s e r d e s P r o g r a m m s d a r stellt u n d v o n P R O L O G i g n o r i e r t w e r d e n d a r f . I n P R O L O G m a n m e i s t e n s zwei v e r s c h i e d e n e M ö g l i c h k e i t e n , K o m m e n t a r e hat in ein P r o g r a m m e i n z u f ü g e n . E r s t e n s , d u r c h E i n s c h l i e ß e n d e s K o m E i g e n s c h a f t e n v o n O b j e k t e n u n d B e z i e h u n g e n z w i s c h e n i h n e n werd e n i n P R O L O G als Fakten ausgedrückt. Z u n ä c h s t stellen wir d a r , welche P e r s o n e n es i n d e r gibt: Familie m e n t a r s z w i s c h e n / * u n d * / . Z w e i t e n s , d u r c h S c h r e i b e n e i n e s '/, w i r d alles n a c h d e m '/.-Zeichen bis z u m Z e i l e n e n d e als K o m m e n t a r aufgefaßt. Die F a k t e n über Familie Maier könnten also m i t K o m m e n t a r e n versehen ungefähr so aussehen: person(lore). person(gerd). person(gitte). person(uli). Nicht zu vergessen, der Hund F i d o : /* Die Personen Lore, Gerd, person(lore). person(gerd). in Familie Gitte Maier und U l i */ sind: KAPITEL 18 1. EINFUHRUNG 1.2. FAKTEN, person(gitté). Konjunktion person(uli). ausgedrückt. REGELN UND ANFRAGEN 19 u n d w i r d e i n f a c h d u r c h ein K o m m a , in P R O L O G Insgesamt erhalten wir also die Regel: /* Die Frauen: */ /* weiblich(lore). Jeder /* Die Maenner: Vater schenkt Spielzeugeisenbahn weiblich(gitte). schenkt(X,Y,Z) */ seinem Sohn eine */ :- 7. X s c h e n k t vater(X,Y), maennlich(uli). maennlich(Y) , '/, Y m a e n n l i c h spielzeugeisenbahn(Z) . '/, Z i s t /* D e r Hund h e i s s t Fido '/. X V a t e r Y ein maennlich(gerd). Einen solchen E i n t r a g in die W i s s e n s b a s i s n e n n t m a n e i n e Die Spielzeugeisenbahn d a n a c h Rumpf. */ E i n e i n z e l n e r F a k t ist e b e n f a l l s e i n e K l a u s e l . W i r demselben K o p f z u s a m m e n u n d n e n n e n sie Eltern-Kind-Beziehungen Klau- d e r K l a u s e l , d e r Teil sagen hier, d a ß d e r R u m p f leer ist. W i r f a s s e n alle K l a u s e l n m i t spielzeugeisenbahn(d318). /* und Spielzeugeisenbahn sel. D e r Teil v o r d e m : - - S y m b o l heißt Kopf vater(gerd,gitté) . ist falls und */ hund(fido). /* Z, von Y i s t Prädikat. */ '/. g e r d ist der vater m u t t e r ( l o r e , g i t t é ) . '/, l o r e ist die mutter von gitté vater(gerd.uli). von gitté mutter(lore,uli). 1.2.3 Anfragen Es ist j a s c h ö n u n d g u t , i m m e r m e h r W i s s e n in u n s e r P R O L O G System h i n e i n s t e c k e n z u k ö n n e n . A b e r n a t ü r l i c h m ö c h t e n w i r a u c h irgendeinen N u t z e n a u s d e n F a k t e n u n d R e g e l n , d i e in d e r W i s - 1.2.2 sensbasis g e s p e i c h e r t sind, z i e h e n k ö n n e n . K u r z u m , w i r m ö c h t e m Regeln dem S y s t e m ein p a a r F r a g e n s t e l l e n . B e z i e h u n g e n zwischen O b j e k t e n , die n u r u n t e r b e s t i m m t e n B e d i n g u n g e n g e l t e n , w e r d e n in P R O L O G d u r c h Regeln • Ist F i d o ein H u n d ? daxgestellt. D a F a m i l i e M a i e r in einer heilen W e l t l e b t , g i b t es a u c h n o c h • W e r ist die M u t t e r v o n U l i ? d e n a l t e n B r a u c h , d a ß j e d e r V a t e r s e i n e m S o h n e i n e Spielzeugeis e n b a h n s c h e n k t . Diese R e g e l k ö n n e n w i r e t w a s • W e r ist d e r V a t e r v o n G i t t e u n d U l i ? umformulieren zu: • W e r b e k o m m t v o n G e r d die S p i e l z e u g e i s e n b a h n „ d 3 1 8 " ? X schenkt Y ein Z, falls X V a t e r von Y ist Wenn und Y m ä n n l i c h ist P R O L O G - n a c h einiger Zeit u n d e i n i g e m a n d e r e m T e x t - und Z eine Spielzeugeisenbahn ist. mer mit d e m S y m b o l ? - . Dies d e u t e t a n , d a ß P R O L O G b e r e i t ist, ein PROLOG-System startet, so meldet sich im- I n d i e s e r F o r m k ö n n e n wir die R e g e l s o f o r t n a c h P R O L O G über-, v s e t z e n . Die falls-Beziehung und ter diesem F r a g e s y m b o l einen b e l i e b i g e n K l a u s e l r u m p f , d . h . e i n e n heißt Fakt o d e r eine K o n j u n k t i o n v o n F a k t e n , e i n g e b e n . W e n n w i r die w i r d in P R O L O G als : - heißt in d e r L o g i k Implikation geschrieben. Die t m d - B e z i e h u n g ° man m B e n u t z e r eine A n f r a g e e n t g e g e n z u n e h m e n . W i r k ö n n e n hin- 20 KAPITEL 1. EINFÜHRUNG E i n g a b e mit einem Punkt und durch Drücken der „ R e t u r n - T a s t e " 1.3. L e i d e r ist die B e d i e n u n g d i e s e r P r o g r a m m e nicht einheitlich. 1 a b g e s c h l o s s e n h a b e n , w i r d P R O L O G v e r s u c h e n , diese F o r m e l z u 21 ÜBUNGEN Sie m ü s s e n a l s o v e r s u c h e n , j e m a n d e n z u finden, d e r sich m i t I h r e m b e w e i s e n . W i r wollen also die o b i g e n F r a g e n e i n m a l a n P R O L O G P R O L O G - S y s t e m s c h o n a u s k e n n t u n d i h n u m eine k u r z e E i n f ü h - stellen: rung bitten. ?- hund(fido). Ü b u n g 1.1 ?X = ?X = ?X = G e b e n S i e d a s P R O L O G - P r o g r a m m aus d i e s e m K a - pitel m i t d e m E d i t o r ein u n d s p e i c h e r n S i e es in einer D a t e i a b . yes S t a r t e n Sie d a n n d e n P R O L O G - I n t e r p r e t e r . L a d e n Sie die D a t e i mutter(X,uli). als W i s s e n s b a s i s in d a s S y s t e m . S t e l l e n S i e d i e A n f r a g e n dieses lore vater(X.gitte), Kapitels. vater(X,uli). gerd Ü b u n g 1 . 2 E r w e i t e r n S i e die W i s s e n s b a s i s u m F a k t e n u n d R e - schenkt(gerd,X,d318). geln f ü r folgendes W i s s e n : uli D a s g r o ß g e s c h r i e b e n e X in d e n A n f r a g e u n d a u c h a n d e r e g r o ß g e - • Lore und Gerd sind v e r h e i r a t e t . s c h r i e b e n e S y m b o l e in d e n o b i g e n R e g e l n s i n d s o g e n a n n t e V a r i a - • X ist G r o ß v a t e r v o n Y , falls Z d e r V a t e r v o n Y ist u n d X d e r blen. F ü r Variablen versucht P R O L O G einen W e r t zu finden. 2 V a t e r v o n Z ist. V e r g e s s e n S i e n i c h t z u s ä t z l i c h e P e r s o n e n f ü r W i e P R O L O G die L ö s u n g e n f ü r diese A n f r a g e n h e r a u s f i n d e t , die G r o ß e l t e r n e i n z u f ü h r e n . w e r d e n w i r in den n ä c h s t e n K a p i t e l n g e n a u u n t e r s u c h e n . • L o r e liebt G e r d u n d G e r d l i e b t L o r e . G i t t e liebt F i d o . 3 1.3 Übungen Stellen Sie n e u e A n f r a g e n . D a s Ziel dieser Ü b u n g e n ist e s , sich ein wenig m i t d e r S y s t e m u m gebung a u f Ihrem Übungsrechner v e r t r a u t zu m a c h e n . Die wicht i g s t e n Teile eines P R O L O G - S y s t e m s s i n d • der P R O L O G - I n t e r p r e t e r • der E d i t o r D e r P R O L O G - I n t e r p r e t e r ist i n d e r L a g e , eine W i s s e n s b a s i s a u s einer D a t e i zu l a d e n u n d B e w e i s e ü b e r dieser Wissensbasis d u r c h z u f ü h r e n . D e r E d i t o r ist ein P r o g r a m m , m i t d e m Texte, insbesondere natürlich P R O L O G - P r o g r a m m t e x t e , a m Bildschirm e i n g e g e b e n u n d in einer D a t e i a b g e s p e i c h e r t w e r d e n k ö n n e n . 'Die „Return-Taste" ist meist mit dem Symbol <-> oder etwas Ähnlichem beschriftet und bewirkt den Beginn einer neuen Zeile. 2 3 W i r leben in einer heilen Welt! dito r Kapitel 2 Strukturen Um Informationen irgendwelcher A r t darzustellen, werden Strukturen b e n ö t i g t . I n f o r m a t i o n u n d S t r u k t u r i e r t h e i t sind in e i n e m gewissen S i n n ä q u i v a l e n t e B e g r i f f e . D a s R a u s c h e n e i n e s Radios v e r m i t t e l t keine I n f o r m a t i o n , die A n s a g e n des N a c h r i c h t e n s p r e chers als h o c h s t r u k t u r i e r t e A b f o l g e v o n S i g n a l e n t u n dies s e h r wohl. D e r U n t e r s c h i e d z w i s c h e n I n f o r m a t i o n s t r ä c h t i g k e i t u n d I n formationslosigkeit läßt sich a n so e i n f a c h e n D i n g e n w i e Z e i c h e n ketten v e r d e u t l i c h e n . M i t d e r f o l g e n d e n , „ z u f ä l l i g e n " B u c h s t a b e n reihe w i s s e n w i r wenig, w e n n n i c h t zu s a g e n , n i c h t s a n z u f a n g e n : tsnlridaoeemtnioitvmnrf Dagegen ist f o l g e n d e Z e i c h e n k e t t e f ü r u n s informationsvermit- telnd, weil sie n a c h d e n G e s e t z m ä ß i g k e i t e n d e r d e u t s c h e n S p r a c h e (und d e r i h r v o m L a t e i n i s c h e n ü b e r k o m m e n e n R e g e l n ) g e b i l d e t ist: informationsvermittelnd KAPITEL 24 2. STRUKTUREN 2.2. KOMPLEXE W i r b e o b a c h t e n , d a ß e i n e r s e i t s die G r u n d s t r u k t u r e n , d i e a t o m a r e n s t e h e n d e ) „ W ö r t e r " h e i ß e n Zahlen. E i n h e i t e n für m ö g l i c h e S t r u k t u r e n f e s t g e l e g t w e r d e n m ü s s e n . I m S t r u k t u r e n a u c h Konstanten B e i s p i e l d e r B u c h s t a b e n k e t t e n s i n d dies die B u c h s t a b e n . für a t o m a r e S t r u k t u r e n auf: Natür- lich k ö n n t e die E b e n e d e r a t o m a r e n E i n h e i t e n a u c h „ t i e f e r g e l e g t " 25 STRUKTUREN M a n c h m a l werden atomare g e n a n n t . Z ä h l e n wir einige Beispiele fido w e r d e n u n d B u c h s t a b e n k ö n n t e n selbst z u m B e i s p i e l als in B e - 1238 zug auf ihr Aussehen strukturiert angesehen werden. Andererseits microProcessor m u ß es a u c h V o r s c h r i f t e n g e b e n , wie T e i l s t r u k t u r e n z u e i n a n d e r x4711 kom- U m S t r u k t u r e n d e u t l i c h v o n e i n a n d e r a b z u g r e n z e n , k a n n m a n sie p l e x e r e S t r u k t u r e n e r g e b e n . S o g i b t es in u n s e r e m B e i s p i e l d e r sich v o n e i n e m K ä s t c h e n u m r a h m t d e n k e n o d e r sie sich als d e n B u c h s t a b e n k e t t e n ( o d e r e i g e n t l i c h d e r d u r c h sie r e p r ä s e n t i e r t e n „ I n h a l t " eines K ä s t c h e n s v o r s t e l l e n : in B e z i e h u n g g e s e t z t w e r d e n k ö n n e n u n d d a m i t g r ö ß e r e , P h o n e m e ) Gesetzmäßigkeiten d a r ü b e r , wie Silben der deutschen Ifidö] S p r a c h e gebildet w e r d e n u n d d a r a u f a u f s e t z e n d , R e g e l n , wie Silb e n zu W ö r t e r n z u s a m m e n g e f ü g t w e r d e n k ö n n e n : in for ma tions ver mit telnd In der Sprachwissenschaft als e m p i r i s c h e W i s s e n s c h a f t geht d a r u m , die R e g e l n z u b e s c h r e i b e n , die d e r b e t r e f f e n d e n c h e v e r m u t l i c h z u g r u n d e liegen. I n d e r I n f o r m a t i k u n d es Spra- Mathe- m a t i k geht m a n d e n a n d e r e n W e g : W i r d ü r f e n n a c h u n s e r e m ei- 2.2 Komplexe Strukturen E i n komplexer Term a u s e i n e m Funktor (meist kurz a u c h „ T e r m " genannt) besteht und aus einer festen, g e o r d n e t e n Menge von genen Belieben systematisch S t r u k t u r e n aufbauen. D a z u werden Argumenten, wir möglichst einfache, aber ausdrucksfähige S t r u k t u r e n wählen ein A t o m sein. N a c h d e m F u n k t o r s t e h e n z w i s c h e n e i n e r öffnen- wollen. d e n u n d e i n e r s c h l i e ß e n d e n K l a m m e r d i e A r g u m e n t e des T e r m s . U m in P R O L O G I n f o r m a t i o n z u k o d i e r e n , g i b t es n u r eine sehr e i n f a c h e A r t v o n S t r u k t u r e n , die Terme. E s lassen sich jedoch sehr viele m a t h e m a t i s c h e S t r u k t u r e n als T e r m e d a r s t e l l e n . I m folgend e n w e r d e n w i r die B e g r i f f e „ T e r m " u n d „ S t r u k t u r " a u s t a u s c h b a r verwenden. T e r m e w e r d e n in d r e i K l a s s e n e i n g e t e i l t . E i n T e r m ist e n t w e d e r atomar o d e r komplex oder variabel. d i e selbst w i e d e r u m T e r m e s i n d . D e r F u n k t o r m u ß Falls m e h r e r e A r g u m e n t e a u f t r e t e n , m ü s s e n diese durch K o m m a s g e t r e n n t w e r d e n . D i e R e i h e n f o l g e d e r A r g u m e n t e ist v o n B e d e u tung! Beispiele für komplexe S t r u k t u r e n : sterblich(sokrates) füttert(lisa.fido) füttert(lisa.vater(sokrates)) W i e d a s d r i t t e B e i s p i e l z e i g t , k ö n n e n T e r m e beliebig tief v e r - 2.1 s c h a c h t e l t sein. I n d e r K ä s t c h e n - N o t a t i o n w i r d d i e s e V e r s c h a c h t e - Atomare Strukturen lung b e s o n d e r s d e u t l i c h : A t o m a r e Strukturen werden p e r Schreibkonvention gekennzeichn e t . In d e r R e g e l e n t s p r e c h e n in P R O L O G a t o m a r e f e r n b e s t e h e n . M i t K l e i n b u c h s t a b e n b e g i n n e n d e „ W ö r t e r " heißen Atome. fuettert Strukturen „ W ö r t e r n " , d i e m i t e i n e m K l e i n b ü c h s t a b e n b e g i n n e n o d e r a u s ZifM i t Ziffern b e g i n n e n d e ( u n d folglich n u r a u s Ziffern b e - 1lisa1 vater 1sokrates| KAPITEL 26 2.3 2. 2.4. Variable Strukturen 27 ÜBUNGEN In P R O L O G w e r d e n s o w o h l P r ä d i k a t e s e l b s t a l s a u c h die A r gumente v o n P r ä d i k a t e n als T e r m s t r u k t u r e n d a r g e s t e l l t . Z u m Bei- F ü r Variablen besteht zur Unterscheidung von a t o m a r e n Struktu- spiel k a n n s t e r b l i c h ( s o k r a t e s ) r e n d i e S c h r e i b k o n v e n t i o n , d a ß sie d u r c h „ W ö r t e r " d a r g e s t e l l t wer- tenbasis e i n g e t r a g e n w e r d e n , a l s a u c h als S t r u k t u r den, die mit e i n e m G r o ß b u c h s t a b e n oder d e m U n t e r s t r e i c h u n g s - werden, d.h. a l s A r g u m e n t in e i n e m P r ä d i k a t a u f t r e t e n : sowohl a l s F a k t u m in die D a manipuliert zeichen _ beginnen. Beispiele für Variablen: chaos( X X4711a sterbliche sokrates Funktor Argument ), Argument Wer lisa ) Argument Hund HundeHuette _fido 1] Hund D e r allein a u f t r e t e n d e U n t e r s t r e i c h u n g s s t r i c h _ h e i ß t Variable. anonyme 2.4 Übungen [ A n o n y m e V a r i a b l e n w e r d e n v e r w e n d e t , w e n n d u r c h die Stelligkeit eines P r ä d i k a t s z w a r ein A r g u m e n t v e r l a n g t w i r d , der Übung 2.1 N a m e u n d d e r W e r t dieses A r g u m e n t s a b e r in d e r b e t r e f f e n d e n die es e r l a u b e n , z u ü b e r p r ü f e n , o b eine S t r u k t u r a t o m a r o d e r va- K l a u s e l n i c h t i n t e r e s s a n t ist. riabel ist: a t o m i c u n d v a r . B e i s p i e l e für d i e V e r w e n d u n g : W i e auch schon aus der S c h u l m a t h e m a t i k bekannt, sind Variablen P l a t z h a l t e r f ü r beliebige S t r u k t u r e n d e r entsprechenden ?- atomic(werda). yes f o r m a l e n Sprache, der wir uns bedienen, wie z u m Beispiel der ?- „ S p r a c h e " der arithmetischen Ausdrücke oder eben der Sprache no ?- P R O L O G . Beispiel aus der Arithmetik: In P R O L O G g i b t es b e r e i t s „ e i n g e b a u t e " P r ä d i k a t e , atomic(Z). var(Z). yes x 2 = -1 ?- V a r i a b l e n k a n n m a n sich für die V e r a r b e i t u n g i m P r o g r a m m als N a m e n von K ä s t c h e n vorstellen, in die zu irgendeinem Zeitpunkt die Belegung, der W e r t der Variablen u n t e r g e b r a c h t wird. Derj a n o n y m e n V a r i a b l e n e n t s p r i c h t ein u n b e n a n n t e r K a s t e n . atomic(a(B)). no ?no var(aCB)). Klassifizieren Sie f o l g e n d e P R O L O G - T e r m e in e i n e d e r d r e i o b e n genannten K l a s s e n atomar, komplex o d e r variabel. Sie die R i c h t i g k e i t I h r e r A n t w o r t e n gleich m i t I h r e m Hund System m i t t e l s d e r e n t s p r e c h e n d e n P r ä d i k a t e . D i e S p r a c h k o n v e n t i o n sei, d a ß V a r i a b l e n , in d e r e n „ K ä s t e n " noch 1- F i d o n i c h t s s t e h t , uninstantiierte 2. nummer Variablen heißen. Cj 24 Uberprüfen PROLOG- 28 KAPITEL 3. 2. hallo_jungs 4. h a l l o (Jungs) 5. Jungs 6. x Kapitel 3 7. Y Ü b u n g 2.2 V e r s u c h e n Sie, die I n f o r m a t i o n f o l g e n d e r S ä t z e k o m - p a k t als P R O L O G - T e r m e d a r z u s t e l l e n : 1. A n n e t t e ist mit J o h a n n verheiratet. Unifikation 2 . O t t o s Schreibtisch enthält als Schreibmaterial fünf Kugelschreiber, 5 7 Blatt Papier und als sonstige Dinge a c h t Zeitschriftenartikel und einen Flaschenöffner. 3 . Grammatikalische Kategorien sind Verben, N o m e n , Adjektive, Präpositionen, Artikel, Adverben und Partikel. Verben werden unterteilt in ein-, zwei-, drei- und vierstellige V e r b e n . Adjektive werden unterschieden nach pränominal und prädikativ. U m Anfragen an PROLOG-Wissensbasen beweisen zu können, m ü s s e n P R O L O G - T e r m e m i t e i n a n d e r v e r g l i c h e n w e r d e n . Sie w e r d e n d a b e i n i c h t n u r v e r g l i c h e n , s o n d e r n , falls m ö g l i c h , a u c h t a t sächlich m i t e i n a n d e r identisch g e m a c h t . Dieses Identisch-Machen w i r d Unifikation genannt. Das W o r t „Unifikation" wurde nicht o h n e G r u n d g e w ä h l t : unus heißt eins, f a c e r e h e i ß t m a c h e n . Unifiz i e r e n heißt d a n n zu eins m a c h e n , vereinen, vereinigen. Z u r E i n f ü h rung in die P r o b l e m s t e l l u n g stellen wir uns folgende Wissensbasis, bestehend aus nur einem Fakt, vor: weiblich(lore). . KAPITEL 30 31 3. F o l g e n d e A n f r a g e läßt sich p o s i t i v b e a n t w o r t e n , d a g e n a u d i e s e r — die F u n k t o r e n d e r b e i d e n T e r m e s i n d v e r s c h i e d e n , F a k t in d e r W i s s e n s b a s i s s t e h t : — die S t e l l i g k e i t e n d e r b e i d e n F u n k t o r e n s i n d v e r s c h i e d e n ?- weiblich(lore). — m i n d e s t e n s ein A r g u m e n t e p a a r v o n A r g u m e n t e n glei- yes c h e r P o s i t i o n i m T e r m läßt s i c h n i c h t unifizieren. J e d o c h w i r d die F r a g e n a c h d e m Z u t r e f f e n d e s F a k t e s ?- weiblich(lisa). Die A u f z ä h l u n g u n d B e s c h r e i b u n g d e r F ä l l e , in d e n e n die U n i - no negativ beantwortet, weil in der W i s s e n s b a s i s nicht lisa son- d e r n l o r e als A r g u m e n t des P r ä d i k a t s w e i b l i c h e r w ä h n t w i r d . E s ist keine Unifikation z w i s c h e n d e n b e i d e n v e r s c h i e d e n e n A t o m e n m ö g l i c h . Falls wir a b e r d a s A r g u m e n t n o c h n i c h t a u f ein b e s t i m m t e s A t o m festlegen, s o n d e r n e i n e V a r i a b l e d a f ü r a n g e b e n , b e k o m m e n w i r eine p o s i t i v e A n t w o r t m i t d e r I n f o r m a t i o n , d u r c h w e l c h e s A t o m die V a r i a b l e ersetzt ?- werden muß: weiblich(Wer). Wer = zweier T e r m e e r f o l g r e i c h v e r l ä u f t , liefert eine V e r a r b e i - t u n g s v o r s c h r i f t , d.h. e i n e n Algorithmus, Algorithmus 3.1 t i o n b e z ü g l i c h aller v e r s c h i e d e n e n A r t e n v o n T e r m e n d a r s t e l l e n . D i e s e s V e r f a h r e n t e s t e t nicht n u r , s o n d e r n e r s e t z t , falls es eine d a z u g i b t , die V a r i a b l e n z w e i e r T e r m e d e r a r t , das b e i d e s m a l d e r s e l b e T e r m d a s t e h t . E s liefert s o z u s a g e n die „ U b e r - E i n g a b e : zwei T e r m e Termi Term 2 d e r b e i d e n T e r m e , falls diese 3 M e t h o d e : T e s t e , w e l c h e r d e r d r e i f o l g e n d e n F ä l l e f ü r Termi Term 2 und zutrifft, u n d g i b die z u g e h ö r i g e Ü b e r d e c k u n g Term 3 als E r g e b n i s zurück: 1 . Ein I n t u i t i v sind zwei a t o m a r e T e r m e t r i v i a l e r w e i s e g l e i c h , w e n n sie atomarer falls e b e n d i e gleichen P R O L O G - A t o m a r e s i n d . E i n e V a r i a b l e k a n n m i t j e d e m beliebigen T e r m g l e i c h g e s e t z t w e r d e n . D e r V e r g l e i c h vers c h a c h t e l t e r T e r m e ist e t w a s k o m p l i z i e r t e r : E s m ü s s e n d i e F u n k d e r b e i d e n T e r m e ver- g l i c h e n w e r d e n , wenn d a n n a u c h die A r g u m e n t e in d e r R e i h e n f o l g e Term unifiziert mit demselben atomaren dann 2 . Eine (a) • d i e Unifikation zweier k o m p l e x e r T e r m e s c h e i t e r t , w e n n eines Variable falls (b) 3 gleich Terme Termi unifiziert Termi mit jedem u n d Term 2 ist Term Term beide Variablen sind, gleich Termi 3 Term: u n d Termi gleich 2 falls Termi e i n e V a r i a b l e u n d Term 2 ein n i c h t v a - riabler T e r m ist, • es h a n d e l t sich u m zwei v e r s c h i e d e n e a t o m a r e S t r u k t u r e n • ein T e r m ist a t o m a r , d e r a n d e r e k o m p l e x dieselben a t o m a r e n 2 ist T e r m dann unifizierbar. D i e U n i f i k a t i o n zweier T e r m e s c h e i t e r t in f o l g e n d e n F ä l l e n : u n d Term Termi sind, Variablenersetzungen u n i f i z i e r b a r sind, sind die b e i d e n T e r m e i n s g e s a m t d e r folgenden K r i t e r i e n erfüllt i s t : und Term: d e c k u n g " zweier T e r m e , falls diese e x i s t i e r t . i h r e s A u f t r e t e n s jeweils m i t t e l s d e r s e l b e n Unifikation e x i s t i e r t ; s o n s t die A n t w o r t : n e i n D i e d r e i B e i s p i e l e zeigten A s p e k t e d e r U n i f i k a t i o n v o n V a r i a b l e n t o r e n u n d die A r g u m e n t e z a h l (Stelligkeit) f ü r die D u r c h f ü h r u n g von Unifikationen: A u s g a b e : d i e Ü b e r d e c k u n g Term lore u n d A t o m e n . I m folgenden wollen w i r d a s V e r f a h r e n d e r Unifika- Möglichkeit fikation ¿ a n n sind Term (c) falls Term 2 3 u n d Termi riabler T e r m ist, dann gleich e i n e V a r i a b l e u n d Termi s i n d Term 3 Term 2 ein n i c h t v a - , u n d Term 2 gleich Termi 32 KAPITEL 3. Unifikation falls komplexer Term 3. 3.1. Tenne: L a s s e n sich zwei B i l d e r o d e r K ä s t c h e n s o ü b e r e i n a n d e r ein k o m p l e x e r T e r m m i t F u n k t o r F , 1 der x Steifigkeit n u n d d e n A r g u m e n t e n A , A^ , u 2 ein k o m p l e x e r T e r m m i t F u n k t o r F , 2 der 2 Steifigkeit m u n d d e n A r g u m e n t e n A , A, 21 22 2m und für F i u n d F Fall 1 dieser Unifikationsvorschrift 2 zutrifft und die Steifigkeiten gleich s i n d , d . h . n = m und für alle P a a r e v o n A r g u m e n t e n < A , Ai n < A, in A 2m 3 1 3 2 3 n d e n O b j e k t e i d e n t i s c h . M a n k a n n sich dies u n g e f ä h r d u r c h d e n o p Transparentfolie gemalte Kästchen übereinanderlegt. c h e n ( o d e r V a r i a b l e n ) h a b e n die E i g e n s c h a f t , >, 2 ..., „Uber- liefert, o h n e d a ß die Beispiel 3.1 E r f o l g r e i c h e Unifikation i m a t o m a r e n F a l l : dabei n ö t i g e n V a r i a b l e n e r s e t z u n g e n m e h r a l s e i n e n b e s t e h t Term 3U T 32l ... und den T. 3n U n i f i k a t i o n ( „ Ü b e r d e c k u n g " ) ist m ö g l i c h . A n s o n s t e n lassen sich die b e i d e n T e r m e n i c h t unifizieren. D i e Unifikation einer V a r i a b l e n m i t e i n e m n i c h t v a r i a b l e n b e w i r k t die Instantiierung fido fido aus dem Funktor i\ 3 Argumenten T Käst- e r l a u b t ist, a b e r d a ß n i e m a l s I n f o r m a t i o n g e l ö s c h t w e r d e n k a n n . Wert annehmen müssen dann Die d a ß d u r c h Unifi- kation nur das Hinzufügen von m e h r I n f o r m a t i o n bzw. S t r u k t u r > diese U n i f i k a t i o n s v o r s c h r i f t deckungen" T , T , . . . , T c h e n . F a l l s U n i f i k a t i o n d u r c h g e f ü h r t w e r d e n k a n n , w e r d e n die beit i s c h e n Effekt v e r a n s c h a u l i c h e n , der e n t s t e h t , w e n n m a n zwei a u f ist A l e g e n , d a ß sie als e i n s e r s c h e i n e n ? Dabei sind, wie i m vorherigen Kapitel eingeführt, Variablen N a m e n v o n K ä s t c h e n , alle a n d e r e n T e r m e m ö g l i c h e I n h a l t e v o n K ä s t - Ain ist und Term 33 BEISPIELE Beispiel 3.2 Term dieser V a r i a b l e n . I n s t a n t i i e r u n g ist ein neudeutscher Ausdruck, der v o m englischen „ i n s t a n t i a t i o n " S c h e i t e r n e i n e r Unifikation i m a t o m a r e n F a l l : fido fifo her- s t a m m t . Das Wort „instance" bedeutet Beispiel. Instantiierung e i n e r V a r i a b l e n heißt also d a s F e s t l e g e n e i n e r Beispiel-Belegung Unifikation ( „ Ü b e r d e c k u n g " ) ist nicht m ö g l i c h . f ü r e i n e V a r i a b l e . In e i n e m a n d e r e n P r o g r a m m l a u f k ö n n t e d i e V a r i a b l e j a a u c h a n d e r s b e l e g t w e r d e n . E i n e V a r i a b l e , die n o c h n i c h t Beispiel 3.3 m i t e i n e m n i c h t v a r i a b l e n T e r m unifiziert w o r d e n ist, n e n n t m a n einem Atom: Unifikation einer uninstantiierten Variablen uninstantiiert. fido 3.1 Beispiele W i e d e r soll u n s die K a s t c h e n d e n k w e i s e z u r V e r a n s c h a u l i c h u n g dien e n : Die F r a g e n a c h d e r Unifizterbarkeit e n t s p r i c h t in e t w a d e m folgenden Uberdeckungsproblem: D a s Ergebnis der Unifikation ( „ Ü b e r d e c k u n g " ) ist: fido mit 34 KAPITEL Beispiel 3.4 3. UNIFIKATION Unifikation zweier u n i n s t a n t i i e r t e r V a r i a b l e n : 3.2. 35 ÜBUNGEN ?- =(atom,atom). yes Die o b i g e A n f r a g e läßt s i c h a u c h b e q u e m e r s c h r e i b e n a l s : ?D a s E r g e b n i s d e r Unifikation ( „ Ü b e r d e c k u n g " ) i s t : atom • atom. Bei A n f r a g e n m i t V a r i a b l e n , w e r d e n d i e T n s t a n t i i e r u n g e n d e r V a riablen ausgegeben: X, Y ? - p r a e s i d e n t (Wer, Land) Wer = D i e V a r i a b l e n b e z e i c h n e n d e n gleichen K a s t e n . W i r d X s p ä t e r m i t i r g e n d e i n e m a n d e r e n T e r m unifiziert, ist d a m i t g l e i c h z e i t i g Y a u c h m i t d i e s e m T e r m unifiziert. Beispiel 3.5 = praesident (Person, island) . Person Land = island W e n d e n Sie die U n i f i k a t i o n s v o r s c h r i f t a u f f o l g e n d e P a a r e v o n T e r m e n a n , d.h. e n t s c h e i d e n Sie, w e l c h e P a a r e v o n T e r m e n unifizierb a r s i n d . G e b e n Sie bei u n i f i z i e r b a r e n T e r m e n d e n b e t r e f f e n d e n Unifikation zweier k o m p l e x e r T e r m e : Unifikator a n , bei nicht u n i f i z i e r b a r e n d i e B e g r ü n d u n g f ü r d a s Scheitern der Unifikation. Ü b e r p r ü f e n Sie I h r e V e r m u t u n g e n praesidentin praesidentin I !vigdis island 1 I y P R O L O G - S y s t e m s oder Ihres R e c h n e r s n a c h , wie P r o g r a m m l ä u f e „gewaltsam" abgebrochen werden können. D a s E r g e b n i s d e r Unifikation ( „ Ü b e r d e c k u n g " ) i s t : praesidentin 'vigdis 3.2 Y island Übungen Ü b u n g 3 . 1 Unifizierbarkeit zweier T e r m e läßt sich direkt i m D i a log m i t d e m P R O L O G - S y s t e m n a c h p r ü f e n , m i t t e l s d e s e i n g e b a u t e n P r ä d i k a t s =. D i e s e P r ä d i k a t n i m m t die b e i d e n z u v e r g l e i c h e n d e n T e r m e als A r g u m e n t e . an I h r e m P R O L O G - S y s t e m . S c h l a g e n Sie z u v o r i m H a n d b u c h I h r e s 3. ?- a(X,Y,Z) = a(q,U). 4. ?- a(X,Y,Z) = 5. ?- a(b(C)) a(W,P,t). = b(a(C)). 36 KAPITEL 6. ?- fl(f2(i3,i4),f5(i6,X,Y),g) 3. = il(A,f5(B,f7,f8),H). 7. ?- X = X. 8. ?- f(X) ?- fl(f2(f3,i4),i5(f6,X,Y),g) 9. = X. fl(A,f5(B,f7),H). 10. ?- a = a(X,Y) . 11. ?- a = 12. ?- qvertz a. = qwerty. = Kapitel 4 Beweisverfahren W i e in d e r E i n l e i t u n g e r w ä h n t , werden A n f r a g e n an eine t e n b a s i s a u f g r u n d eines Beweisverfahrens Da- b e a n t w o r t e t . W i r wol- len h i e r keine f o r m a l k o r r e k t e D e f i n i t i o n v o n B e w e i s v e r f a h r e n f ü r P R O L O G liefern, s o n d e r n v i e l m e h r e t w a s G e f ü h l d a f ü r v e r m i t teln, wie dieses B e w e i s v e r f a h r e n i n d e r P r a x i s a b l ä u f t . B e r e i t s die a l t e n G r i e c h e n b e s c h ä f t i g t e n s i c h m i t d e r E n t w i c k lung v o n S c h e m a t a , die d a s s y s t e m a t i s i e r e n , Schließen was wir logisches n e n n e n . S c h l u ß f o l g e r u n g e n sollen n i c h t willkürlich g e - schehen, sondern durch Befolgen b e s t i m m t e r Vorschriften nachvollziehbar sein. E i n s c h o n seit d e n a l t e n G r i e c h e n b e k a n n t e s B e i spiel f ü r eine Schlußregel ist d e r Modus Ponens , d e r in e i n e r v e r a l l - gemeinerten F o r m im P R O L O G - B e w e i s v e r f a h r e n verwendet wird. Schlußregeln b e s c h r e i b e n d i e B e z i e h u n g z w i s c h e n e i n e r M e n g e v o n V o r a u s s e t z u n g e n u n d d e r m ö g l i c h e n F o l g e r u n g a u s diesen V o r a u s setzungen. 38 KAPITEL Beispiel 4.1 Modus Voraussetzungen: 4. BEWEISVERFAHREN BEWEISVERFAHREN 4.1 Ponens P ( X ) falls Q(X) UND 39 UNIFIKATION Beweis verfahren und Unifikation Bei B e t r a c h t u n g des B e w e i s v e r f a h r e n s w i r d a u c h e r s i c h t l i c h , w o Q(X) Folgerung: 4.1. in P R O L O G die U n i f i k a t i o n z u m Z u g k o m m t : W e i t e r e , P(X) gemäß Modus P o n e n s zu b e w e i s e n d e V o r a u s s e t z u n g e n w e r d e n m i t der Unifikation als T e s t k r i t e r i u m in d e r D a t e n b a s i s a u f g e f u n d e n . D i e Beispiel 4.2 zu b e w e i s e n d e B e h a u p t u n g m u ß m i t d e m Kopf A n w e n d u n g des M o d u s P o n e n s : X ist s t e r b l i c h , falls e i n e r K l a u s e l in d e r Datenbasis unifizierbar sein. D i e s e U n i f i k a t i o n liefert Variablen- Instantiierungen für w e i t e r h i n z u b e w e i s e n d e A u s s a g e n i m X ein M e n s c h ist. Rumpf dieser K l a u s e l . S o k r a t e s ist ein M e n s c h . F ü r u n s e r einfaches B e i s p i e l k a n n u n s die K ä s t c h e n - D e n k w e i s e S o k r a t e s ist s t e r b l i c h . nocheinmal z u r V e r a n s c h a u l i c h u n g des G e s c h e h e n s d i e n e n . Bei komplizierteren F ä l l e n s t ö ß t d a s K ä s t c h e n - P a r a d i g m a j e d o c h a u f D i e V o r a u s s e t z u n g e n des Beispiels stellen, n a c h P R O L O G über- s e t z t , eine kleine D a t e n b a s i s d a r : sterblich(X) seine G r e n z e n . F ü r d e n e i n f a c h e n F a l l n u n b e s i t z e j e d e K l a u s e l f ü r jede A r g u m e n t s t e l l e i h r e s K o p f e s ein K ä s t c h e n , d a s f ü r d e n a u f dieser A r g u m e n t s t e l l e s i t z e n d e n T e r m s t e h e n soll. F a l l s a l s o a u f :- einer A r g u m e n t s t e l l e e i n e V a r i a b l e s t e h t , w i r d ein m i t d e m N a - mensch(X). men d e r b e t r e f f e n d e n V a r i a b l e n g e k e n n z e i c h n e t e s K ä s t c h e n ein- mensch(sokrates). geführt. B e a c h t e , d a ß d i e K ä s t c h e n u n d d e r e n N a m e n lokal z u r A n diese D a t e n b a s i s k ö n n e n n u n A n f r a g e n g e s t e l l t w e r d e n , d e r Form: Klausel s i n d , in d e r sie v o r k o m m e n . V a r i a b l e n n a m e n g e l t e n a l s o nicht k l a u s e l ü b e r g r e i f e n d . W e r d e n in v e r s c h i e d e n e n K l a u s e l n d i e „Beweise mir:" gleichen N a m e n b e n u t z t , s i n d diese als v e r s c h i e d e n e b z w . „ L ä ß t sich a u s d e r D a t e n b a s i s f o l g e r n : " d.h. v e r s c h i e d e n e K ä s t c h e n a n z u s e h e n . D e r Ü b e r s i c h t l i c h k e i t we- ?- gen z e i c h n e n w i r bei K l a u s e l n d e r D a t e n b a s i s d i e K ä s t e n o b e r h a l b sterblich(sokrates). D a w i r b e w e i s e n l a s s e n wollen, d a ß diese B e h a u p t u n g a u s den K l a u s e l n d e r D a t e n b a s i s als d e n V o r a u s s e t z u n g e n f o l g t , w i r d die S c h l u ß r e g e l des M o d u s P o n e n s „ r ü c k w ä r t s " a n g e w a n d t des eigentlichen T e x t s d e r K l a u s e l , bei A n f r a g e n a n d i e D a t e n b a s i s unterhalb des zu b e w e i s e n d e n F a k t s . werden: W i r k e n n e n d a s A u s s e h e n d e r F o l g e r u n g u n d s t e l l e n a n h a n d der S c h l u ß r e g e l fest, welche A u s s a g e n b e w i e s e n sein m ü s s e n , Beispiel 4 . 3 Klausel mit den zugehörigen K ä s t c h e n : damit d i e s e F o l g e r u n g bewiesen ist. D i e A n f r a g e s t e r b l i c h ( s o k r a t e s ) l ä ß t sich m i t d e m K o p f d e r K l a u s e l s t e r b l i c h ( X ) Variablen, X :-mensch(X) unifizieren u n d f ü h r t z u d e r B e l e g u n g X = s o k r a t e s . D a d u r c h wird sterblich(X):-mensch(X) klar, welche weitere Voraussetzung bewiesen werden m u ß : mensch(sokrates) . D i e s e r U n t e r b e w e i s läßt s i c h in t r i v i a l e r W e i s e d u r c h f ü h r e n , d a d i e s a l s F a k t in d e r D a t e n b a s i s s t e h t . In K ä s t c h e n - N o t a t i o n l a u t e t die A n f r a g e (Zielklausel), t r a c h t e n wollen: die wir b e - 40 KAPITEL 4. BEWEISVERFAHRElm.2. 41 BACKTRACKING sterblich(sokrates) mensch(sokrates) sokrates sokrates Verfolgen wir n o c h einmal den Beweisverlauf für diese Zielklausel, mensch(sokrates) u m zu s e h e n , wie die V a r i a b l e n v e r s c h i e d e n e r K l a u s e l n d u r c h U n i fikation z u e i n a n d e r in B e z u g g e s e t z t w e r d e n . P a s s e n d z u r A n f r a g e finden wir in d e r D a t e n b a s i s die K l a u s e l sterblich(X) mensch(X). D a m i t ist der B e w e i s d a f ü r , d a ß S o k r a t e s s t e r b l i c h ist, e r f o l g r e i c h abgeschlossen. :j D i e U n i f i k a t i o n d e r einzigen A r g u m e n t s t e l l e d e r A n f r a g e u n d derj des K o p f e s d e r K l a u s e l in d e r D a t e n b a s i s W i r fassen z u s a m m e n : D u r c h Unifikation wird Information ü b e r K l a u s e l - G r e n z e n h i n w e g t r a n s p o r t i e r t u n d „in m i t e i n a n d e r unifizierten K ä s t e n " a n g e s a m m e l t . „ A n s a m m e l n " b e i n h a l t e t a u c h , daß die „ T r a n s p o r t r i c h t u n g " d e r I n f o r m a t i o n n i c h t f e s t g e l e g t i s t . E i n e r s e i t s k a n n I n f o r m a t i o n v o n e i n e r A n f r a g e in e i n e K l a u s e l e i n - st erbli ch(s okrat es) gebracht werden, als R a h m e n b e d i n g u n g e n , u n t e r denen d e r Beweis weitergeführt werden m u ß . Andererseits kann a u c h sokrates Information aus einer K l a u s e l d e r D a t e n b a s i s a u f die A n f r a g e ü b e r t r a g e n w e r den u n d s o m i t e i n e „ A n t w o r t " in F o r m v o n I n s t a n t i i e r u n g e n d e r sterblich(X):-mensch(X) liefert die V a r i a b l e n - I n s t a n t i i e r u n g ( „ F ü l l u n g d e s K ä s t c h e n s " ) f ü r | die n a c h d e m S c h e m a des M o d u s P o n e n s n o c h z u b e w e i s e n d e A u s sage: Variablen der A n f r a g e erzeugt werden. 4.2 Backtracking In d e n m e i s t e n F ä l l e n l a u f e n j e d o c h B e w e i s e n i c h t s o g e r a d l i n i g und p r o b l e m l o s a b . N e h m e n w i r f o l g e n d e D a t e n b a s i s a n : mensch(sokrates) sokrates U m diese Unteranfrage, d.h. v o m S y s t e m e r z e u g t e A n f r a g e z u b e weisen, greifen w i r a u f d e n F a k t z u r ü c k : sokrates mensch(s,okrates) schwabe(X) wohnt(X,Y). ort(aalen). ort(lorch). wohnt(lothar,aalen). wohnt(gustav.lorch). wohnt(adele,lorch). Die K l a u s e l n u n d F a k t e n s i n d in einer b e s t i m m t e n Reihenfolge a n g e o r d n e t , die S u c h e n a c h e i n e m B e w e i s b a s i e r t a u f d i e s e r R e i henfolge. W o l l e n D i e s e r F a k t l ä ß t sich spielend m i t d e r n e u e r z e u g t e n z u b e w e i s e n d e n A n f r a g e unifizieren: :- ort(Y), wir z u m Beispiel nachprüfen lassen, ob Gu- s t a v g e m ä ß o b i g e r D a t e n b a s i s ein S c h w a b e ist, p a s s i e r t f o l g e n d e s : schwabe ( g u s t a v ) paßt a u f den K o p f der Klausel: KAPITEL 42 schwabe(X) 4. 4.2. BEWEISVERFAHRE 43 BACKTRACKING schwabe(gustav):- :- ort(Y), ort(Y), wohnt(gustav,Y). wohnt(X,Y). Um schwabe(gustav) zu beweisen, m u ß also zuerst o r t ( Y ) ge- z e i g t w e r d e n , d . h . es m u ß ein m ö g l i c h e r W o h n o r t g e r a t e n werden; rt(lorch) ort(aalen w e r d e n . Als e r s t e r F a k t ü b e r W o h n o r t e ist e i n g e t r a g e n : schwabe(gustav):- ort(aalen) . E s b l e i b t z u zeigen, d a ß gilt w o h n t ( g u s t a v , a a l e n ) . Dies ist je-, d o c h n i c h t m ö g l i c h . D e r Teilbeweis wohnt ( g u s t a v , a a l e n ) scheiß t e r t . D i e B e w e i s s u c h e ist in eine S a c k g a s s e g e r a t e n . back- ort(aalen), wohnt(gustav, tracking aalen). I scheitert Die z w e i t e A l t e r n a t i v e ist a n g e m e s s e n e r u n d e r l a u b t e i n e n erfolg- schwabe(gustav):- reichen A b s c h l u ß des B e w e i s e s , d a ß G u s t a v e i n S c h w a b e ist: ort(Y), wohnt(gustav,Y). schwabe(gustav):- ort(aalen) ort(Y), schwabe(gustav):- wohnt(gustav,Y). ort(aalen), wohnt(gustav, aalen). ort(lorch) ort(aalen) I scheitert schwabe(gustav):- schwabe(gustav):- ort(lorch), ort(aalen), wohnt(gustav, wohnt(gustav,aalen). lorch). M a n soll n i c h t gleich a u f g e b e n , w e n n m a n in e i n e S a c k g a s s e g e r ä t . H ä u f i g hilft e s , z u m l e t z t e n V e r z w e i g u n g s p u n k t zurückzugehen wohnt (guslj a v , l o r c h ) u n d eine d e r a n d e r e n M ö g l i c h k e i t e n a u s z u p r o b i e r e n . D i e B e w e i s s u c h e m u ß a l s o z u r ü c k a n die Stelle, a n d e r d i e zwischen o r t ( a a l e n ) und o r t ( l o r c h ) Entscheidung g e t r o f f e n w u r d e , u n d ihr Glück mit der zweiten Alternative versuchen. Dieses zen auch B e i m Z u r ü c k s e t z e n wi^d die a l t e I n s t a n t i i e r u n g d e r Variablen X in d e r Schwabenklausel „vergessen" u n d eine neue Instantiierung X = l o r c h angenommen. X = gustav o.k. Zurückset- z u m l e t z t e n V e r z w e i g u n g s p u n k t heißt a u f N e u d e u t s c h backtracking. scheitert Im e b e n g e z e i g t e n F a l l t r a t e i n internes Scheuern weises auf. W i r k ö n n e n a b e r a u c h „ v o n a u ß e n Maschine z u m B a c k t r a c k i n g zwingen. eines T e i l b e die PROLOG 44 KAPITEL 4. BEWEISVERFAHREll.3. B e i s p i e l 4 . 4 S t e l l e n wir a n o b i g e D a t e n b a s i s f o l g e n d e F r a g e : ?- schwabe( Wer = Wer •durch S c h e i t e r n eines Teilbeweises a u s g e l ö s t . B a c k t r a c k i n g l ä ß t ). lalle V a r i a b l e n b e l e g u n g e n , die a m l e t z t e n V e r z w e i g u n g s p u n k t g e - lothar; fciacht Wer = g u s t a v ; Wer = 45 ABLAUFPROTOKOLL wurden, vergessen und erlaubt die e r n e u t e Instantiierung •der V a r i a b l e n m i t d e n a n d e r e n m ö g l i c h e n W e r t e n . D a b e i ist z u b e - adele; a c h t e n , d a ß d i e D a t e n b a s i s strikt v o n o b e n n a c h u n t e n d u r c h s u c h t no wird, u n d d a ß U n t e r z i e l e in d e r R e i h e n f o l g e i h r e r E r w ä h n u n g i n der e n t s p r e c h e n d e n K l a u s e l a n g e s t o ß e n w e r d e n . Der Strichpunkt ; ist jeweils B e n u t z e r e i n g a b e u n d b e w i r k t , d a ß n a c h einer w e i t e r e n L ö s u n g g e s u c h t w i r d . F a l l s keine weiteren L ö s u n g e n zu finden sind, w i r d d a s e n d g ü l t i g e S c h e i t e r n d e r Suc h e m i t n o a n g e z e i g t . D i e v e r s c h i e d e n e n L ö s u n g s w e g e k ö n n e n als] B a u m v o n A l t e r n a t i v e n d a r g e s t e l l t w e r d e n . S t a t t wie in d e r Dat e n b a s i s vertikal sind h i e r die a l t e r n a t i v e n F a k t e n eines P r ä d i k a t s horizontal angeordnet. ¿ 0 s c h w a b e ( X ) :ort(Y), wohnt(X,Y). 4.3 ort(lorch)" schwabe(X):- schwabe(X):- ort(aalen), ort(lorch), wohnt(X, aalen). Ablaufprotokoll 1 Die m e i s t e n P R O L O G - S y s t e m e b i e t e n M ö g l i c h k e i t e n a n , die einzelnen B e w e i s s c h r i t t e m i t z u v e r f o l g e n (trace). M a n gibt ein: trace. wohnt(X,lorch). und d a n n z u m Beispiel wohnj;a.othar,_aalen) _ X = wohnt(gustajJLor^h) lothar o.k. X = gustav o.k. _ w b h n t ( a d e l e , 1Lol X = adele o.k. spy schwabe/1. also d e n P r ä d i k a t s n a m e n u n d die Steifigkeit d e s z u u n t e r s u c h e n den P r ä d i k a t s . D i e B e w e i s s c h r i t t e w e r d e n in v i e r K l a s s e n e i n g e teilt: c a l l , D e r B e g r i f f backtracking redo, exit, f a i l . D e r B e g i n n eines neuen Teilbe- r ü h r t d a h e r , d a ß sich d e r B e w e i s e r weises w i r d m i t c a l l g e k e n n z e i c h n e t . D i e M a r k i e r u n g r e d o d e u t e t a n den Verzweigungspunkten i m Beweis, also a n Stellen, in denen d e n V e r s u c h d e r W i e d e r h o l u n g eines T e i l b e w e i s e s m i t a l t e r n a t i v e r m e h r e r e v e r s c h i e d e n e F o r t s e t z u n g e n des B e w e i s e s m ö g l i c h s i n d , Variablenbelegung an. Mit e x i t M a r k i e r u n g e n s e t z t , w e l c h e r P f a d e i n g e s c h l a g e n w u r d e , u n d wel- des g e r a d e b e a r b e i t e t e n T e i l b e w e i s e s , m i t f a i l d a s S c h e i t e r n die- wird das erfolgreiche Beenden c h e P f a d e f ü r die w e i t e r e B e w e i s s u c h e n o c h z u r V e r f ü g u n g s t e - ses T e i l b e w e i s e s m i t d e r g e g e n w ä r t i g e n hen. Scheitert ein Lösungsweg, „setzt" P R O L O G zurück u n d ver- angezeigt. D a s Ablaufprotokoll für das eben besprochene Beispiel s u c h t die n ä c h s t e m ö g l i c h e A l t e r n a t i v e . B a c k t r a c k i n g w i r d a l s o sieht a u f d e m B i l d s c h i r m in e t w a s o a u s : Variablen-Instantiierung 46 KAPITEL 4. 4.5. BEWEISVERFAHRE* Anfrage z u m e i n s t e l l i g e n P r ä d i k a t s c h w a b e d a s call(schwabe(gustav)) call(ort(Y)) sichtbar w i r d , n o s p y exit(ort(aalen)) Prädikat. call(wohnt(gustav,aalen)) sich A b l a u f p r o t o k o l l e v o n A n f r a g e n a n d i e s e D a t e n b a s e n a n . exit(ort(lorch)) 2. W a s g e s c h i e h t b e i d e r A n f r a g e call(wohnt(gustav,lorch)) exit(wohnt(gustav,lorch)) ?- exit(schwabe(gustav)) raetsel:was_denn, B e w e i s e in P R O L O G folgen i m P r i n z i p d e m S c h e m a des M o d u s dient hierbei z u m A u f f i n d e n passender K l a u s e l n in d e r D a t e n b a s i s u n d s o m i t z u m E r z e u g e n v o n Un- t e r b e w e i s e n . D a d a s B e w e i s v e r f a h r e n a u f S u c h e b e r u h t , k a n n es a u c h i n S a c k g a s s e n g e r a t e n , die d a n n ein Z u r ü c k s e t z e n ( v o n V a r i a erfordern. N o c h nicht erwähnt w u r d e , daß das Suchverfahren handelsüblicher P R O L O G - S y s t e m e unvollständig raetsel. a n folgende D a t e n b a s i s : Zusammenfassung b l e n b e l e g u n g e n ) , d.h. backtracking, wieder v o m der bis j e t z t e r w ä h n t e n P r o g r a m m b e i s p i e l e u n d s c h a u e n Sie redo(ort(Y)) P o n e n s . Die Unifikation Ablaufprotokoll s c h w a b e / 1 e n t f e r n t d i e s e n Spion 1. Definieren Sie sich D a t e n b a s e n ( d . h . D a t e i e n ) m i t e i n i g e n fail(wohnt(gustav,aalen)) 4.4 47 ÜBUNGEN wie_auch_immer. was_denn:abxy. was_denn:cufg. cufg. wie_auch_immer. ist. D a s heißt, in einigen F ä l l e n findet d e r B e w e i s e r k e i n e n B e w e i s ( o b w o h l n a c h den G e s e t z e n d e r L o g i k ein B e w e i s 3. W i e a r b e i t e t d a s P r ä d i k a t r a e t s e l ( X ) ? e x i s t i e r e n m ü ß t e ) , s o n d e r n g e r ä t in e i n e „ u n e n d l i c h e S c h l e i f e " , weil e r z u e r s t in die T i e f e des B e w e i s b a u m e s s u c h t u n d d a b e i e v e n t u - , eil a u f einen Zweig g e r ä t , d e r sich beliebig v e r l ä n g e r n l ä ß t , o h n e j e m a l s z u s c h e i t e r n o d e r sich erfolgreich a b s c h l i e ß e n z u l a s s e n ( G e - raetsel(X):was_denn(X). was_denn(huhn(X)):abrakadabra(X). n a u e r e s h i e r z u z . B . in [Schöning 1 9 8 7 ] ) . was_denn(hahn(X)):- 4.5 Übungen Ü b u n g 4 . 1 S c h l a g e n Sie in I h r e m j simsalabim(X). abrakadabra(ute). sinsalabim(otto). P R O L Q G - H a n d b u c h nach, i wie d e r T r a c e , das Ablaufprotokoll für Beweise, ein- u n d aus-] g e s c h a l t e t w i r d . N o r m a l e r w e i s e g e s c h i e h t dies m i t t e l s d e r P r ä d i - j kate t r a c e und spy, n o t r a c e und n o s p y . D u r c h t r a c e wird ein] Ablaufprotokoll ermöglicht, durch n o t r a c e wieder der N o r m a l z u - J s t a n d hergestellt, s p y s c h w a b e / 1 b e w i r k t , d a ß m i t d e r n ä c h s t e n ] Ü b u n g 4 . 2 E n t w e r f e n Sie eine D a t e n b a s i s , d i e f o l g e n d e I n f o r m a tion e n t h ä l t : • Apfelbäume, S t a c h e l b e e r - und H i m b e e r s t r ä u c h e r , K a k t e e n und Hundsrosen sind Pflanzen 48 KAPITEL 4. BEWEISVERFAHREP \ • Apfel sind F r ü c h t e von A p f e l b ä u m e n , S t a c h e l b e e r e n von Sta- 1 c h e l b e e r s t r ä u c h e r n , Himbeeren von H i m b e e r s t r ä u c h e r n , Feigen| von Kakteen, H a g e b u t t e n von H u n d s r o s e n . • Apfel, Stachelbeeren, Himbeeren und Feigen sind eßbar • E t w a s kann mit d e r B e z e i c h n u n g „ O b s t " versehen w e r d e n , wenn es eine Pflanze gibt, dessen F r u c h t es ist, und wenn efl eßbar ist. T e s t e n Sie die K o r r e k t h e i t d e r D a t e n b a s i s z u m Beispiel mit Anfragen (mit Backtracking!): ?- obst(Was). ?- 'Kapitel 5 1 d e n l T } U J| V - |UT »l CS 1 ß Q J 1 obst(hagebutte). Ü b u n g 4 . 3 S c h r e i b e n Sie m i n d e s t e n s z w e i K l a u s e l n , d i e d i e P r o blematik ausdrücken: W a s war zuerst d a - d a s Huhn o d e r d a s E i ? V e r b a l e L ö s u n g in e t w a : Ein Huhn ist d a , falls ein Ei d a ist ( w a r ) . Ein Ei ist da, falls ein Huhn da ist. U n t e r s u c h e n Sie d a s A b l a u f v e r h a l t e n d i e s e r b e i d e n P r ä d i k a t e . Das z u r e i t e w i c h t i g e K o n z e p t in P R O L O G i s t n e b e n d e r Unifikation d i e Rekursion. R e k u r s i o n w i r d als P r i n z i p i m w e s e n t l i c h e n in d e r M a t h e m a t i k e i n g e s e t z t , es g i b t j e d o c h a u c h e i n i g e w e n i g e Beispiele a u s d e m täglichen L e b e n , die die Idee der Rekursion verdeutlichen. Eine wunderschöne Realisierung von Rekursivität sind die •-Matr-^schkas", die r u s s i s c h e n P u p p e n . M a n öffnet die ä u ß e r s t e P u p p e - m d e r b l i c k t die g l e i c h e P u p p e w i e d e r , n u r e i n e N u m m e r kleiner. A u c h d i e s e P u p p e k a n n m a n öffnen u s w . , bis m a n b e i d e r klein=T«n, der unzerlegbaren ( „ a t o m a r e n " ) P u p p e angelangt Die D r a u f s i c h t a u f e i n e M a t r u s c h k a w ä r e u n g e f ä h r s o : ist. KAPITEL 50 5. REKURSIO 5.1. DIE puppe(emma(Puppe)):- In P R O L O G ( u n d a u c h in a n d e r e n P r o g r a m m i e r s p r a c h e n ) l a s s sich vergleichbare S t r u k t u r e n aufbauen. B e v o r wir j e d o c h uns puppe(Puppe). e r s t e s r e k u r s i v e s P r ä d i k a t f o r m u l i e r e n , sollten w i r d e s s e n V o r g Die A n f r a g e : hensweise verbal beschreiben: wird b e a n t w o r t e t m i t : • I n n e r s t e , „ u n z e r l e g b a r e " P u p p e n e n t s p r e c h e n in atom.aren Ato emma. H ü l l e u n d d e r n ä c h s t k l e i n e r e n P u p p e in i h r . D i e E i n b e t t u n v o n kleineren in g r ö ß e r e S t r u k t u r e n findet sich in komplexe w i e d e r . E i n e n i c h t - a t o m a r e P u p p e soll z u m B e i s p i d i e S t r u k t u r e m m a ( P u p p e ) b e s i t z e n , w o b e i d e r F u n k t o r emm unvollständig. A u f g r u n d d e r impliziten Abbruchbedingung Abbruchbedingung, die da- hen ist, folgt z u m i n d e s t d i e A n t w o r t n o . S c h w e r w i e g e n d e r w i r d d a s Fehlen d e r A b b r u c h b e d i n g u n g , w e n n die A n f r a g e m i t e i n e r V a r i a blen s t a t t m i t e i n e r v o l l s t ä n d i g spezifizierten S t r u k t u r versehen ist: ?- puppe(Puppe). Hier k o m m t ü b e r h a u p t keine A n t w o r t v o m B e w e i s e r z u r ü c k , weil darin enthaltene Puppe steht, über deren genauere Strukt die B e w e i s p r o z e d u r i n e i n e Schleife wir j a nicht unbedingt Bescheid wissen. „unendlich" g r o ß e M a t r u s c h k a a u f z u b a u e n . E i n e P u p p e der Verschachtelungstiefe 2 werde d a n n z . B . so dar Schreibung realisiert, lautet: puppe(emma). puppe(emma(Puppe)):puppe(Puppe). „Sinnvolle" rekursive Prädikatsdefinitionen zeichnen sich dadurch a u s , d a ß sie m i n d e s t e n s zwei K l a u s e l n h a b e n , d . h . m i n d e s t e n s z w e Fallunterscheidungen berücksichtigen. Zuerst erwähnt wird meis t e n s d i e Abbruchbedingung. D i e A b b r u c h b e d i n g u n g h e i ß t deswe- g e n s o , weil d a s z u definierende P r ä d i k a t nicht m e h r i m R u m p f dies e r K l a u s e l e r w ä h n t w i r d , also kein rekursiver Aufruf m e h r statt- D i e a n d e r e K l a u s e l b e i n h a l t e t die R e k u r s i o n : d a s P r ä d i k a t r u f t s i c h selbst w i e d e r auf. 5.1 no d e r ä u ß e r e n P u p p e e n t s p r i c h t , die V a r i a b l e P u p p e f ü r di gestellt: emma(emma(emma)). D a s P r ä d i k a t , das obige verbale B e findet. puppe(emma(emma(emma))) . durch e n t s t e h t , d a ß d e r F a l l e i n e r a t o m a r e n P u p p e n i c h t v o r g e s e - • J e d e größere P u p p e besteht aus ihrer nach außen sichtbare Termen ?- Die D e f i n i t i o n ist a l s o o h n e eine explizite PROLO W ä h l e n w i r als B e i s p i e l d a s Strukturen. 51 ABBRUCHBEDINGUNG Die Abbruchbedingung Weis g e s c h i e h t bei e i n e m r e k u r s i v definierten P r ä d i k a t , d a s keine explizite Abbruchbedingung enthält? Nehmen wir einmal an, das P r ä d i k a t p u p p e sei n u r d u r c h f o l g e n d e K l a u s e l d e f i n i e r t : gerät. E s wird versucht, die 52 KAPITEL 5.2 5. 3. REKURSIO, Der rekursive Aufruf BEISPIEL: [Beispiel 5 . 1 53 WEGSUCHE Stadtplan S o wie d a s F e h l e n v o n A b b r u c h b e d i n g u n g e n f ü r r e k u r s i v e P r ä d i k a t s d e f i n i t i o n e n f ü r die B e w e i s s u c h e „ t ö d l i c h " sein k a n n , ist a u c j | nicht j e d e A r t v o n r e k u r s i v e m A u f r u f sinnvoll. V e r ä n d e r n w i r dii A r g u m e n t e in d e r r e k u r s i v e n K l a u s e l wie f o l g t : puppe(emma). puppe(Puppe):puppe(emma(Puppe)). Stellen wir a n diese D a t e n b a s i s d i e A n f r a g e ?- puppe(emma(emma(emma))). g e l a n g t die B e w e i s s u c h e w i e d e r u m in e i n e „ u n e n d l i c h e " Schleife^ weil m i t j e d e m r e k u r s i v e n A u f r u f d e s P r ä d i k a t s p u p p e d i e Strukt u r d e s s e n A r g u m e n t s v e r g r ö ß e r t s t a t t v e r k l e i n e r t w i r d . U m z u be^ weisen, d a ß die S t r u k t u r emma(emnia(eiMna))) d e r D e f i n i t i o n von p u p p e g e n ü g t , w i r d v e r s u c h t , dies f ü r alle beliebig g r o ß e n P u p p e n zu beweisen. W i r folgern d a r a u s , daß rekursive Prädikatsdefinitionen nur d a n n S i n n m a c h e n , w e n n die A r g u m e n t e des . r e k u r s i v e n A u f r u f s m i t „ k l e i n e r e n " S t r u k t u r e n i n s t a n t i i e r t s i n d als d i e A r g u m e n t e im 1 —'cS¿£££í> Prädikatskopf. Rekursive Aufrufe m i t der gleichen o d e r g a r e i n e r j g r ö ß e r e n S t r u k t u r f ü h r e n i m a l l g e m e i n e n i n e i n e Schleife. D a P R O L O G keine solchen ü b e r s i c h t l i c h e n g r a p h i s c h e n D a r s t e l - 5.3 lungen zuläßt, müssen wir zuerst d a r a n g e h e n , die Information Beispiel: Wegsuche N e h m e n w i r a n , w i r wollten a n h a n d d e s f o l g e n d e n aus d e r K a r t e in eine L i s t e v o n F a k t e n z u ü b e r s e t z e n . E i n F a k t Ausschnitts a u s e i n e m S t a d t p l a n d e n W e g v o m B a h n h o f z u r U n i v e r s i t ä t fin d e n . W e n n w i r e i n m a l die R i c h t u n g f e s t g e s t e l l t h a b e n , in die w i r gehen müssen, wird unsere Aufgabe daxin bestehen, den n o c h verbliebenen W e g z u u n s e r e m g e g e n w ä r t i g e n S t a n d o r t s c h r i t t w e i s e zu; verkleinern. Oder „rekursiv formuliert": • W e g s u c h e b e s t e h t d a r i n , die e r s t e T e i l s t r e c k e d e s W e g e s z u u n d d a n n v o m neuen S t a n d o r t a u s die k a n t e n G e b ä u d e . Die K r e u z u n g e n s e l b s t w e r d e n d a r g e s t e l l t d u r c h Terme k r e u z t ( S t r a s s e l , S t r a s s e 2 ) . vegCbahnhof,kreuzt (kronenstr, l a u t e n s c h l a g e r s t r ) ) . kreuzt(friedrichstr,kronenstr)) . weg(bahnhof, kreuzt ( f r i e d r i c h s t r , k r i e g s b e r g s t r ) ) . p u n k t i d e n t i s c h ist. erneut zu s t a r t e n . zwei P u n k t e n w i e z u m Beispiel e i n e r K r e u z u n g o d e r e i n e m m a r - weg(kreuzt(kronenstr,lautenschlagerstr), • D i e W e g s u c h e e n d e t , w e n n u n s e r S t a n d o r t m i t d e m Ziel- finden, der A r t weg ( P u n k t 1 , P u n k t 2 ) b e s c h r e i b t d i e V e r b i n d u n g z w i s c h e n Wegsuche veg(kreuzt(friedrichstr,kriegsbergstr) , kreuzt(f riedrichstr,kronenstr)). weg(kreuzt(friedrichstr,kronenstr),uni) . 54 KAPITEL 5. REKURSIO.i 5.4. 55 ÜBUNGEN • Auf unterster F ü h r u n g s e b e n e unterstehen einer M a n a g e r i n j e - weg(kreuzt(friedrichstr.kronenstr), weils eine b e s t i m m t e Anzahl von Mitarbeiterinnen. kreuzt(kriegsbergstr,kronenstr)). weg(kreuzt(kriegsbergstr,kronenstr), Aus einer G r u n d m e n g e v o n M i t a r b e i t e r i n n e n u n d C h e f i n n e n sol- kreuzt(keplerstr.kriegsbergstr)). len sich d u r c h B a c k t r a c k i n g v e r s c h i e d e n e ( i m P r i n z i p u n e n d l i c h e weg(kreuzt(keplerstr.kriegsbergstr),uni). viele) p e r s o n e l l e K o n f i g u r a t i o n e n h e r s t e l l e n l a s s e n . W i r e r w e i t e r n d i e s e D a t e n b a s i s n o c h u m eine r e k u r s i v e P r ä d i k a t s Übung 5.3 d e f i n i t i o n , d i e u n s n a c h o b e n g e n a n n t e n G e s i c h t s p u n k t e n d i e Su- des v o r i g e n K a p i t e l s u m ( w i l l k ü r l i c h e ) A b b r u c h b e d i n g u n g e n , z u m c h e n a c h e i n e m W e g b e s c h r e i b t . D a s P r ä d i k a t w e g s u c h e ist drei- Beispiel u m A n g a b e n ü b e r ein U r h u h n , d a s v o m H i m m e l fiel. ( W o stellig. Sein e r s t e s A r g u m e n t b e i n h a l t e t d e n g e g e n w ä r t i g e n S t a r f d o r t , d a s z w e i t e A r g u m e n t dient z u m M i t f ü h r e n d e r Information E r w e i t e r n Sie die P r ä d i k a t e z u m H ü h n e r - E i - P r o b l e m bleibt d e r H a h n ? ) ü b e r d e n Z i e l p u n k t , d a s d r i t t e A r g u m e n t h a t die F u n k t i o n , dii Ü b u n g 5 . 4 E r w e i t e r n Sie für d a s P r o b l e m w e g s u c h e die M e n g e Information über den Wegverlauf „einzusammeln". der F a k t e n ü b e r m ö g l i c h e V e r b i n d u n g e n . L a s s e n S i e z u , d a ß einzelne V e r b i n d u n g e n a u c h in d e r G e g e n r i c h t u n g b e g a n g e n w e r d e n wegsuche(Punkt,Punkt,Punkt). können. U n t e r s u c h e n Sie j e t z t d a s A b l a u f v e r h a l t e n v o n wegsuche(Anfang.Ende,weg(Anfang,Naechst erWeg)) :- wegsuche(Start,Ende,Weg). weg(Anfang.NaechsterPunkt), Welches P r o b l e m ist e n t s t a n d e n ? M a c h e n S i e s i c h G e d a n k e n , wie wegsuche(NaechsterPunkt,Ende,Naechst erWeg). dem a b g e h o l f e n w e r d e n k ö n n t e . Übung 5.5 R e k u r s i o n w i r d h i e r „ v e r n ü n f t i g " v e r w e n d e t : D i e r e k u r s i v e Klau S c h r e i b e n Sie ein P r ä d i k a t s i m p l e - t erm ( S i m p l e T e r m ) sei „ v e r k ü r z t " jeweils die n o c h z u s u c h e n d e W e g s t r e c k e u m ein S t u f e . Die G e f a h r , d a ß die B e w e i s s u c h e in eine Schleife g e r ä t , ist! das n a c h p r ü f t , o b ein T e r m z u r speziellen M e n g e d e r zumindest von dieser Seite her, gebannt. W i e für „ v e r n ü n f t i g " an Terme g e w a n d t e R e k u r s i o n g e f o r d e r t , w i r d die A u f g a b e d e r B e a r b e i t u n g argument ist ein S I M P L E - T e r m . K o m p l e x e S I M P L E - T e r m e h a - einer S t r u k t u r auf die Aufgabe zur B e a r b e i t u n g einer T e i l s t r u k t u ben davon zurückgeführt. SIMPLE-Term. Tests: als gehört bzw. Funktor das functor SIMPLE-Terme und als erzeugt. einziges Argument ?- simple-term(Term) . 5.4 Übungen Ü b u n g 5.1 ! L a s s e n Sie sich v o n w e g s u c h e d e n W e g v o m B a h n h o i ?- argument; Term = functor(argument); Term = functor(functor(argument)) yes zur Universität suchen (mit Ablaufprotokoll): ?- s i m p l e - t e r m ( h a l l o ) . no wegsuche(bahnhof,uni,Weg). Weg = . . . Term = v_ simple_term(functor(argument,functor)) . Übung 5.2 B e s c h r e i b e n Sie r e k u r s i v die H i e r a r c h i e s t u f e n in eine' F i r m a m i t e i n e r s e h r rigiden O r g a n i s a t i o n s f o r m : \ • Eine Managerin hat i m m e r zwei untergebene M a n a g e r i n n e n . no - simple.term(a23489(hallo) ) . no ? SIMPLE- Das Atom einen Kapitel 6 Listen Im letzten Kapitel wurden Wegverläufe etwas umständlich als T e r m e k o d i e r t . W e g v e r l ä u f e als A u f z ä h l u n g v o n K r e u z u n g s p u n k t e n s i n d Beispiele f ü r Listen. Als L i s t e n s t r u k t u r e n darstellen las- s e n sich alle A r t e n v o n W o r t l i s t e n , T e i l n e h m e r l i s t e n , V e r z e i c h n i s s e n , Zugverläufen u s w . D a L i s t e n o d e r A u f z ä h l u n g e n v o n D i n g e n so häufig a u f t r e t e n , gibt es f ü r sie, z u s ä t z l i c h z u d e r s e i t h e r b e n u t z t e n N o t a t i o n für T e r m s t r u k t u r e n e i n e v e r e i n f a c h t e S c h r e i b w e i s e , a u s d e r der A u f z ä h l u n g s a s p e k t l e i c h t e r e r s i c h t l i c h i s t . 6.1 Notation L i s t e n s t r u k t u r e n w e r d e n in P R O L O G mern durch die eckigen K l a m - [, ] g e k e n n z e i c h n e t . Z w i s c h e n d e n K l a m m e r n w e r d e n die E l e m e n t e der L i s t e a u f g e z ä h l t , d u r c h K o m m a s v o n e i n a n d e r get r e n n t . L i s t e n lassen sich n a c h b e w ä h r t e m S c h e m a r e k u r s i v b e schreiben: 58 KAPITEL • D e r G r e n z f a l l , die a t o m a r e L i s t e ist die leere 6. LISTE. Liste. D i e leer 6.2. DER Beispiel 6.2 Verwendung L i s t e e n t h ä l t sinnigerweise keine E l e m e n t e u n d w i r d folgen- [Erstes I Rest] dermaßen dargestellt: [ [a.b.cl • Nichtleere Listen ] 59 LISTENKONSTRUKTOR des Listenkonstruktors [d,e]] b e s t e h e n a u s zwei „ T e i l e n " : Der L i s t e n k o n s t r u k t o r w i r d vielfältig e i n g e s e t z t , u m L i s t e n s t r u k - — d e m ersten Listenelement, d a s ein b e l i e b i g e r T e r m seir? kann | — u n d d e r Restliste, die w i e d e r u m d i e s e r L i s t e i l d e f i n i t i o n turen a u f z u b a u e n u n d , a n a l o g d a z u , a u s e i n a n d e r z u n e h m e n . schaulichen. M a n k a n n sich e i n e L i s t e n s t r u k t u r als e i n e n Z u g v o r stellen, der v o r e i n e m P r e l l b o c k s t e h t . D a s W i c h t i g e a n Genüge tun muß Zu- erst wollen w i r u n s d e n Z u g r i f f a u f E l e m e n t e e i n e r L i s t e v e r a n dieser M e t a p h e r ist, d a ß n u r d e r Z u g r i f f a u f d e n v o r d e r s t e n W a g e n d e s Beispiel 6.1 Beispiele für Listen Zuges m ö g l i c h ist. U m z u m B e i s p i e l d e n l e t z t e n W a g e n des Z u - [gitte,fido,venus] ges zu e n t f e r n e n , m ü s s e n alle d a v o r s t e h e n d e n W a g e n „ a n g e f a ß t " [X] und v o r ü b e r g e h e n d e n t f e r n t w e r d e n . M a n k a n n a l s o n u r v o n e i n e r [gitte,Planet] Seite h e r u n d d a n n n u r a u f e i n e f e s t e A n z a h l v o n W a g e n z u g r e i - [sonne,[erde,[mond],venus,saturn]] fen. D e r V e r w e n d u n g d e s L i s t e n k o n s t r u k t o r s e n t s p r i c h t a l s o d a s [[ „ W a g e n v o r a n s t e l l e n " b z w . „ - a b h ä n g e n " . H i e r z u f o l g e n n u n einige ].impliziert(mensch(X),sterblich(X))] [menschen([gitte,lore.gert]),hunde([fido.bello])] Beispiele: L i s t e n , als Spezialfall von T e r m e n , k ö n n e n beliebig i n e i n a n d e r un< Beispiel 6 . 3 i n a n d e r e T e r m e n „ v e r s c h a c h t e l t " sein. 6.2 X = Der Listenkonstruktor ?- c h e " w a r k l a r , wie m a n a u s d e r D a r s t e l l u n g d e n A n f a n g u n d del R e s t eines W e g e s e r h ä l t . W e g b e s c h r e i b u n g e n w a r e n als zweistellig« zwischen einem „Anfangspunkt ^ 1 u n d d e m R e s t w e g k o d i e r t . D e r Zugriff a u f die A r g u m e n t e erfolgter s c h l i c h t w e g ü b e r Unifikation. In d e r a b k ü r z e n d e n S c h r e i b w e i s e L i s t e n ist u n s die d a h i n t e r s t e h e n d e T e r m s t r u k t u r v e r b o r g e n . £ [a.b.c] Erstes ? - Ca] X = Zugriff = auf erstes Element [Erstes|Restliste]. = = [b.c] [XIY]. a V = [] [[mond] , v e n u s , s a t u r n ] e i n e m e r s t e n L i s t e n e l e m e n t u n d d e r R e s t l i s t e . U m diese B e z i e h u n * = h a n d l i c h d a r z u s t e l l e n , gibt es d e n Listenkonstruktor, B = d u r c h das Zeichen I . E r trennt aber nicht n u r d a s e r s t e E l e i n * = festen Anzahl von Anfangselementen einer Liste u n d der entsp " = = [A|B]. = [A|B]. [mond] [venus, s a t u r n ] [mond, [ v e n u s , s a t u r n ] ] e i n e r L i s t e v o n d e r e n R e s t , s o n d e r n k a n n a l l g e m e i n z w i s c h e n ein chenden Restliste stehen. von = a Restliste e n t s p r i c h t j e d o c h ebenfalls einer zweistelligen R e l a t i o n z w i s c h dargestell Varianten Listen = X. [a,b,c] Beispiel 6 . 4 B e i unserer selbsterstellten „ L i s t e n n o t a t i o n " i m Beispiel „Wegsu R e l a t i o n weg ( P u n k t , R e s t W e g ) Notationelle Cal[b,c]] t- mond [[venus,saturn]] und auf Restliste 60 KAPITEL Beispiel 6.5 liste ?- [a,b,c] Erstes Zugriff = auf die beiden ersten Elemente 6. und die LISTE 6.3. Res REKURSLVE • E i n e r K l a u s e l , d i e d i e Abbruchbedingung = b Rest [ ] = der Rekursion an- gibt. B e i L i s t e n s i n d dies m e i s t e n s K l a u s e l n , die a u s s a g e n , [Erstes,Zweites IRest]. w a s m i t einer l e e r e n L i s t e o d e r e i n e r L i s t e v o n e i n e r v o r - = a Zweites 61 LISTENVERARBEITUNG gegebenen L ä n g e ( z u m Beispiel einer einelementigen L i s t e ) g e s c h e h e n soll. c • E i n e r K l a u s e l , die d e n Rekursionschritt beschreibt. Meist b e s t e h t dieser S c h r i t t a u s e i n e r M a n i p u l a t i o n des e r s t e n L i stenelements und einem rekursiven Aufruf mit der Restliste Beispiel 6.6 ?- [a.b.c.d] Test = auf Mindestlänge [ als A r g u m e n t . S | J . yes Als e r s t e s Beispiel f ü r ein r e k u r s i v e s P r ä d i k a t z u r B e s c h r e i b u n g ?no Ca.b] ?no C ] = [_,_,_!_]. und V e r a r b e i t u n g von L i s t e n wollen w i r d i e L i s t e n e i g e n s c h a f t , w i e eingangs b e s c h r i e b e n , k o d i e r e n . = [_,_,_! J . '/. ist_liste(Liste) '/. T e s t s u n d Zugriffe n a c h o b i g e m M u s t e r l a s s e n s i c h a u c h a l s P r ä d i kate festschreiben, z u m Beispiel: '/. testet, ob e i n Term e i n e '/. - leere Listen, X - mindestens einelementige deren Rest die '/. 7. '/. X zweites(Liste,ZweitesElement) s e t z t e i n e L i s t e und d e r e n zueinander in Beziehung. zweites Element zweites([_,Zweitesl_].Zweites). ist_liste([ Liste ist: Listen, Listeneigenschaft besitzt. ]). ist_liste([_|Rest]) :- ist_liste(Rest). E i n w e i t e r e s , e l e m e n t a r e s P r ä d i k a t ist d i e B e s c h r e i b u n g d e r E l e m e n t b e z i e h u n g z w i s c h e n e i n e m T e r m u n d e i n e r L i s t e . Die I d e e , die h i n t e r d i e s e m P r ä d i k a t s t e c k t , ist, j e w e i l s d a s e r s t e E l e m e n t 6.3 Rekursive Listenverarbeitung der L i s t e m i t d e m p o t e n t i e l l e n E l e m e n t z u v e r g l e i c h e n . F a l l s dieser Vergleich zu e i n e m n e g a t i v e n E r g e b n i s f ü h r t , w i r d ( r e k u r s i v ) v e r s u c h t , die E l e m e n t b e z i e h u n g f ü r d i e n o c h v e r b l i e b e n e R e s t l i - D u r c h den E i n s a t z von Rekursion wird die V e r a r b e i t u n g v o n Lis t e n s t r u k t u r e n wesentlich flexibler. D a s . S c h e m a f ü r d i e R e k u r s i o n über Listenstrukturen entspricht genau deren A u f b a u . Rekursive P r ä d i k a t e z u r M a n i p u l a t i o n sollten a l s o a u s m i n d e s t e n s zwei K l a u seln b e s t e h e n : s t e n a c h z u w e i s e n . Diese D e f i n i t i o n d e r E l e m e n t b e z i e h u n g leistet m e h r als v e r m u t e t : R u f t m a n d a s P r ä d i k a t e l e m e n t m i t e i n e r V a r i a b l e n für d a s E l e m e n t auf, l a s s e n s i c h ü b e r B a c k t r a c k i n g alle E l e m e n t e e i n e r L i s t e a u f z ä h l e n . Ü b r i g e n s w i r d dieses P r ä d i k a t in d e r P R O L O G - L i t e r a t u r m e i s t e n s u n t e r s e i n e m englischen N a m e n member g e f ü h r t . 62 KAPITEL '/, 6. LISTEM element(Element,Liste) '/, */. '/, Dieses '/, in % - '/. '/, Prädikat 'Liste' Entweder ersten - oder testet, ob ist 'Element' 'Element' mit der L i s t e ist dem der Liste elamer.t ( E l e m e n t , [Element |_]) . element(Element,[_|Restliste]) 63 LISTENVERARBEITUNG append ( V o r d e r e L i s t e . H i n t e r e L i s t e . G e s a m t L i s t e ) '/, Die GesamtListe '/. VordereListe append([ unifizierbar, in der R e s t l i s t e REKURSIVE % 'Element' ist: Element 6.3. * ist eine Konkatenation von und H i n t e r e L i s t e . ].Liste,Liste). append([Element I R e s t ] . L i s t e , [ E l e m e n t i L i s t e l ] ) :- append(Rest,Liste,Listel). * Die A r b e i t s w e i s e v o n a p p e n d soll d u r c h e i n e s c h e m a t i s c h e :- element(Element.Restliste). Dar- stellung des A b l a u f p r o t o k o l l s v e r d e u t l i c h t w e r d e n : E i n e s e h r h ä u f i g e O p e r a t i o n a u f L i s t e n ist d a s „ Z u s a m m e n h ä n g e n " append([ell,el2,el3],[e21,e22],[elllListe]) L z w e i e r L i s t e n in eine L i s t e . Dieses P r ä d i k a t soll a p p e n d h e i ß e n , weil d a s e n g l i s c h e W o r t s c h ö n k u r z ist u n d d a s P r ä d i k a t u n t e r d i e s e m append([el2,el3],[e21,e22],[el2lLl]) L N a m e n s c h o n i n die P R O L O G - G e s c h i c h t e e i n g e g a n g e n ist. a p p e n d b e s c h r e i b t die B e z i e h u n g z w i s c h e n d r e i L i s t e n , z w i s c h e n append([el3],[e21,e22],[el3|L2]) _ J 1 . d e r L i s t e , d e r e n E l e m e n t e „ v o r n e " s t e h e n sollen 2 . d e r L i s t e , d e r e n E l e m e n t e „ h i n t e n " s t e h e n sollen Liste 3. und der Gesamtliste = append([ ] , [ e 2 1 , e 2 2 ] , [ e 2 1 , e 2 2 ] ) [el2l[el3l[e21,e22]]] P R O L O G v e r e i n f a c h t dies z u : [ e l 2 , e l 3 , e 2 1 , e 2 2 ] A n h a n d des S c h e m a s f ü r die L i s t e n r e k u r s i o n soll d i e s e r Z u s a m - E s g i b t v e r s c h i e d e n e Sichtweisen a u f d a s P r ä d i k a t a p p e n d . B e i m m e n h a n g zuerst verbal beschreiben werden. Ü b e r welche der dreij E n t w u r f des P r ä d i k a t s gingen wir ursprünglich v o n der Anwen- L i s t e n soll die R e k u r s i o n „ l a u f e n " ? W i r w ä h l e n d i e „ v o r d e r e Li-,, d u n g a u s , d a ß zwei g e g e b e n e L i s t e n z u s a m m e n g e h ä n g t s t e " , d a wie w i r wissen, d a ß d e r Z u g r i f f a u f L i s t e n n u r v o n v o r n e sollen. D a s E r g e b n i s soll d a n n , wie g e r a d e g e z e i g t , m i t d e r b e i m h e r m ö g l i c h ist. Aufruf uninstantiierten Variablen a u f der d r i t t e n Argumentstellte werden unifiziert w e r d e n . D o c h a p p e n d k a n n n o c h m e h r . E s k a n n v e r • Die Abbruchbedingung ist s c h l i c h t w e g d e r „ t r i v i a l e " F a l l , d e r F a l l , in d e m die v o r d e r e L i s t e leer ist. D a n n stellt die h i n t e r e L i s t e die G e s a m t l i s t e d a r . • Rekursion: Falls die v o r d e r e L i s t e n i c h t l e e r ist, läßt sich folgender Z u s a m m e n h a n g formulieren: wendet werden, u m zu prüfen, o b die Konkatenationsbeziehung zwischen drei g e g e b e n e n L i s t e n b e s t e h t : ?- append([a,b,c],[d.e.f],[a.b.c.d.e.f]) . yes ?- 1 . D a s e r s t e E l e m e n t d e r v o r d e r e n L i s t e ist d a s e r s t e E l e ment der Gesamtliste. no 2. D e r R e s t d e r G e s a m t l i s t e " e r g i b t sich d u r c h append([a,b,c],[d,e],[a,b,c,d,e,f]). Zusam- Das P r ä d i k a t append kann auch a u f die F r a g e a n t w o r t e n , welche m e n h ä n g e n des R e s t e s d e r v o r d e r e n L i s t e m i t d e r h i n - Liste n o c h an eine gegebene Liste a n g e h ä n g t werden m u ß , u m eine teren Liste. b e s t i m m t e Gesamtliste zu ergeben. 64 KAPITEL 6. ,4. LISTE ÜBUNGEN 6 65 ? ?- append([a,b,c].HintereListe, HintereListe 6.4 [a,b,c,d,e,f]). = [d,e,f] : Übung 6.1 D a s g l e i c h e ist f ü r eine n o c h u n b e k a n n t e v o r d e r e L i s t e m ö g l i c h : ?- = [a,b,c] B e s c h r e i b e n S i e d u r c h ein n i c h t - r e k u r s i v e s L i s t e n p r ä - dikat, wie d a s A u s w e c h s e l n d e s v i e r t e n E l e m e n t s e i n e r m i n d e s t e n s append(VordereListe,[d,e,f],[a,b,c,d,e,f]). VordereListe Übungen vierelementigen L i s t e g e s c h i e h t . >] Gleich mehrere Antworten ( d u r c h „von a u ß e n " erzwungenes Back Übung 6.2 t r a c k i n g ) liefert die F r a g e n a c h d e n m ö g l i c h e n Z e r l e g u n g e n eine] Liste ein E l e m e n t l ö s c h t . D a s P r ä d i k a t s o l l t e f o l g e n d e r m a ß e n a u f - L i s t e in e i n e v o r d e r e u n d e i n e h i n t e r e L i s t e : gerufen w e r d e n k ö n n e n : ?- ?- append(VordereListe,HintereListe,[a,b,c]). VordereListe = [ ] HintereListe = [a.b.c]; VordereListe = [a] HintereListe = [b,c]; Schreiben Sie ein rekursives P r ä d i k a t , d a s a u s einer delete(b,[a,b,c,d].Liste). Liste = [a.c.d] E x p e r i m e n t i e r e n Sie m i t d e l e t e , i n d e m S i e v e r s u c h e n , b e i m A u f ruf a n d e r e A r g u m e n t p o s i t i o n e n m i t V a r i a b l e n z u b e l e g e n . VordereListe = HintereListe = [c] ; [a,b] in einer L i s t e ein b e s t i m m t e s E l e m e n t d u r c h ein a n d e r e s z u e r s e t - VordereListe = [a,b,c] zen. D e r A u f r u f des P r ä d i k a t s m ü ß t e s o a u s s e h e n k ö n n e n : HintereListe = [ TIbung 6 . 3 Schreiben Sie ein rekursives P r ä d i k a t , d a s es e r l a u b t , ] ; replace(ZuErsetzendesElement, no ErsatzElement, Die vier verschiedenen Lösungen k o m m e n d a d u r c h zustande, d AlteListe, d i e v o r d e r e L i s t e leer sein k a n n o d e r d a ß d i e v o r d e r e L i s t e das! NeueListe). e r s t e E l e m e n t d e r G e s a m t l i s t e e n t h ä l t ; d i e R e s t l i s t e d e r vorderen^ L i s t e k a n n d a n n e n t w e d e r l e e r sein o d e r d a s e r s t e E l e m e n t der* Testen Sie d a s P r ä d i k a t z u m B e i s p i e l m i t : R e s t l i s t e d e r G e s a m t l i s t e e n t h a l t e n u s w . N i m m t m a n die I n s t a n - j ?- tiierungen der Abbruchbedingung von append a u f verschiedenen' X = R e k u r s i o n s s t u f e n , e r h ä l t m a n d i e B l ä t t e r e i n e s „ S u c h b a u m e s " für diesen P r ä d i k a t s a u f r u f . Die rekursiven Aufrufe stellen die inneren K n o t e n des B a u m e s dar: appendCC ] , [ a , b , c ] , [ a , b , c ] ) append([ | append([a|L3] ],[b,c],[b,c]) ,L4,[a,b,c]) •append([b|L5],L6,[b,c]) append( [ ] , [ c ] , [ c ] ) [otto,emil,katja,mario,egon] Übung 6.4 j append(L1^L2 , [ a , b , c ] ) replace(hajo,katja,[otto,emil,hajo,mario,egon],X). append ( [ c ] , [ ] , [ c ] ) G e g e b e n sei e i n e D a t e n b a s i s m i t f o l g e n d e n P e r s o n e n - beschreibungen : 1 Person([1956,weiblich,verheiratet.Stuttgart 1 ] ) . person([1964,weiblich,ledig,stuttgart70]). Person([1905,maennlich,verwitwet,stuttgart30]). Person([1980.weiblich,ledig,stuttgart40])• Person([1940.maennlich,geschieden,stuttgartl]). 1 Wir haben die heile Welt inzwischen verlassen. 66 KAPITEL 6. LIST 6.4. 67 ÜBUNGEN person([1932.weiblich,verheiratet.Waiblingen]). Übung 6.6 person([1949,weiblich,geschieden,Stetten]) . lung von G r a b i n s c h r i f t e n person([1910,maennlich,ledig,fellbach]) . die die V o r k o m m e n v o n d e f i n i t e n u n d i n d e f i n i t e n A r t i k e l n person([1968,weiblich,ledig,stuttgart80]) . listet. Die R e p r ä s e n t a t i o n f ü r die I n s c h r i f t e n sei d u r c h f o l g e n d e person([1956,maennlich,verheiratet.sindelfingen]). Beispiele v o r g e g e b e n : E n t w e r f e n Sie ein P r ä d i k a t f a h n d u n g , d a s z u b e s t i m m t e n Merk- F u e r die A n a l y s e e i n e s K o r p u s , d e r a u s e i n e r S a m m 2 besteht, wird eine R o u t i n e benötigt, auf- inschrift([[in,den,herzen], m a l e n die z u g e h ö r i g e n P e r s o n e n b e s c h r e i b u n g e n n a c h e i n a n d e r mit- [der.kinder], tels B a c k t r a c k i n g mit ; ausgibt, z u m Beispiel: [bleibt,fuer,ewig], [bewahrt,was,in], ?- [treuer, liebe] , fahndung(weiblich,Beschreibung). Beschreibung = [1956,weiblich,verheiratet,Stuttgartl]j V e r w e n d e n Sie als „ U n t e r p r ä d i k a t " d a s P r ä d i k a t [gewirkt]]) . inschrift([[die,trauernden,kinder], [beweinen,in,der,treuen,mutt e r ] , element. [ein,herrliches,gemueth], [einen,kraeftigen,geist], [eine,seltene,freimuetigkeit], [eine,treffliehe,beraterin]]). 1 3 Ü b u n g 6.5 E s soll ein P r ä d i k a t e n t w o r f e n w e r d e n , d a s die Rei- h e n f o l g e d e r E l e m e n t e e i n e r L i s t e u m d r e h t . E s s o l l t e sich folgendermaßen verhalten: ?- reverse(Liste, []). Liste ?- = [] r r e v e r s e ( [a] , [a] ) . yes ?- reverse([a,b,c,d,e].Liste). Liste = [e.d.c.b.a] besonderer Dank gelte Herrn M.A. Dipl.-Bibl. U. Dickenberger dafür, daß "ir in seine aufschlußreiche Magisterschrift Einsicht nehmen durften Kapitel 7 Programmiertechnik In den vorigen K a p i t e l n w u r d e n s c h o n h ä u f i g e r v e r b a l e B e s c h r e i bungen u n d P r o g r a m m k o d e z u e i n a n d e r i n B e z u g g e s e t z t . In d i e sem K a p i t e l sollen A n t w o r t e n g e g e b e n w e r d e n a u f d i e F r a g e : W i e entsteht a u s e i n e r I d e e ein P r o g r a m m ? D i e s w i r d z u e r s t a n e i n e m Beispiel illustriert, d a r a u f folgt e i n e L i s t e v o n T i p s z u r V o r g e h e n s weise bei d e r P r o g r a m m e r s t e l l u n g u n d z u r V e r m e i d u n g g ä n g i g e i Fehler. P r o g r a m m i e r e r r e d e n h ä u f i g d a v o n , d a ß sie P r o g r a m m e , odei besser P r o g r a m m - S y s t e m e , „bauen". Sind Programmierer ehei 70 KAPITEL 7. PROGRAMMIERTECK m i t A r c h i t e k t e n o d e r m i t M a s c h i n e n b a u e r n zu v e r g l e i c h e n ? A d i e s e F r a g e m ö c h t e n wir keine A n t w o r t g e b e n , s o n d e r n n u r d a r a h i n w e i s e n , d a ß die F u n k t i o n a l i t ä t v o n P r o g r a m m e n e i n e groß R o l l e spielt als die Ä s t h e t i k des P r o g r a m m k o d e s . Obwohl L e u t e g i b t , die b e h a u p t e n , d a ß g e r a d e P R O L O G - P r o g r a m m e au ä s t h e t i s c h , weil n ä m l i c h s c h ö n logisch, sein k ö n n e n . 7.1 7.1. EIN 71 BEISPIEL Verfeinerungstufe 1 Die A u s s a g e , d a ß ein R e g a l a u s s e i n e n E i n z e l t e i l e n z u s a m m e n g e baut wird, b e s a g t n o c h n i c h t s ü b e r d i e e i n z e l n e n T ä t i g k e i t e n , d i e alle z u s a m m e n den R e g a l b a u k o n s t i t u i e r e n . W i e läßt s i c h f e s t s t e l len, welche T ä t i g k e i t e n e r f o r d e r l i c h s i n d ? D a u n s n i c h t s a n d e r e s zur Verfügung s t e h t , als die S a m m l u n g d e r E i n z e l t e i l e , bleibt n u r der V e r s u c h , a u s der Struktur Ein Beispiel d e r E i n z e l t e i l e Hinweise a u f d e r e n Verwendung zu e r h a l t e n . W i e d e r h o l e n w i r a l s o n o c h e i n m a l die I n ventarliste, a b e r d i e s m a l u m die n ö t i g e n D e t a i l s e r w e i t e r t : D i e a l l g e m e i n e V o r g e h e n s w e i s e b e i m P r o g r a m m e n t w u r f soll a n • 2 Seitenteile. J e d e s S e i t e n t e i l b e s i t z t n e m Beispiel verdeutlicht werden. N e h m e n wir an, wir h ä t t e n — je 3 große L ö c h e r a n den Innenseiten seiner e i n e r B i l l i g - M ö b e l f i r m a einen B a u s a t z für ein B ü c h e r r e g a l erstari beiden L e i s t e n d e n . V o r u n s liege ein K a r t o n m i t d e n E i n z e l t e i l e n . D a k e i n e A — 2 kleine L ö c h e r a n d e r R ü c k s e i t e d e r h i n t e r e n b a u a n l e i t u n g mitgeliefert w u r d e u n d wir z u m e r s t e n M a l ein R e g Leiste. z u s a m m e n b a u e n , w i r d es n ö t i g sein, d a ß w i r u n s einige G e d a n • 12 Stifte machen. • 4 Regalbretter. A n j e d e m der 4 E c k e n jedes B r e t - 7.1.1 t e s ist jeweils eine k u r z e R i l l e e i n g e f r ä ß t Konzeptioneller Entwurf Verfeinerungstufe • 1 Stützkreuz mit 4 Löchern. 0 • 4 Schrauben. B e g i n n e n wir m i t einer I n v e n t u r der v o r u n s l i e g e n d e n E i n z e l t e i l Der R e g a l b a u w i r d i m w e s e n t l i c h d a r i n b e s t e h e n , F o l g e n d e Teile sollten sinnigerweise alle i m f e r t i g e n R e g a l v e r w zwischen den E i n z e l t e i l e n d e t w o r d e n sein: möglich? z u schaffen. Wo sind Verbindungen Verbindungen • 2 Seitenteile • Die Stifte • 12 Metallstifte • 3 Regalbretter • Die Schrauben • 1 Stützkreuz • 4 Schrauben v o n d e n E i n z e l t e i l e n a u f ein R e g a l ist: 2 Seitenteile 1 Stützkreuz 4 Schrauben Wir e r a h n e n d e n A b l a u f d e r e i n z e l n e n T ä t i g k e i t e n f ü r d e n R e g a l bau. Als e r s t e s w e r d e n die S t i f t e in die g r o ß e n L ö c h e r d e r Seitenteile g e s t e c k t , d a n n d i e B r e t t e r a u f die S t i f t e a u f g e l e g t . 12 Metallstifte 3 Regalbretter p a s s e n in d i e kleinen L ö c h e r d e r S e i t e n t e i l e u n d in die L ö c h e r des S t ü t z k r e u z e s M a t h e m a t i s c h g e s p r o c h e n , läßt sich s a g e n , d a ß d e r R e g a l b a u o f e n b a r eine Abbildung p a s s e n g r o ß e n - u n d a n z a h l m ä ß i g in die g r o ß e n L ö c h e r d e r S e i t e n t e i l e u n d i n die R i l l e n d e r B r e t t e r Re9 4 bau Regal Als letztes wird z u r S t a b i l i s i e r u n g des R e g a l s d a s S t ü t z k r e u z m i t t e l s der S c h r a u b e n a n die kleinen L ö c h e r d e r S e i t e n t e i l e b e f e s t i g t . D a m ' t kann a u c h die A b b i l d u n g Regalbau werden: detaillierter beschrieben 72 KAPITEL Stifte S e i t e n t e iile le } 7. PROGRAMMLERTECHNDM 7.1. EIN 73 BEISPIEL Seitenteile Seitenteile Die A b b i l d u n g v o n d e n E i n z e l t e i l e n a u f e i n R e g a l w i r d d i e s m a l mit Stiften mit Stiften zerlegt in d i e drei T ä t i g k e i t e n : D a s S t e c k e n Bretter und Brettern 5? Stützkreuz Regal St von Stiften Löchern o d e r v o n S t i f t e n in R i l l e n u n d d a s S c h r a u b e n Sehr. in Das z u s a m m e n g e b a u t e R e g a l ist d a n n n u r n o c h d i e „ A u f z ä h l u n g " v o n Schrauben befestigtem S t ü t z k r e u z , S e i t e n t e i l e n m i t S t i f t e n u n d eingehäng- ten B r e t t e r n , g e n a u e r g e s a g t : d a s a n d e n S e i t e n t e i l e n Die Tätigkeit des Regalbauens besteht also a u s d e n drei „Unter-; tätigkeiten": Einstecken E S , Einlegen E L und Festschrauben FSi Die m a t h e m a t i s c h e Darstellung der Abbildungen gibt z w a r dem t a t s ä c h l i c h e n A b l a u f des E n t s t e h e n s eines R e g a l s w i e d e r , sie d e c k « sich a b e r n i c h t g a n z m i t d e r v o r h e r g e h e n d e n v e r b a l e n B e s c h r e i t b u n g : F ü r d a s A u f l e g e n d e r B r e t t e r i n t e r e s s i e r e n n i c h t d i e ge>j s a m t e n S e i t e n t e i l e , s o n d e r n n u r die angeordneten Stifte. Für das B e f e s t i g e n d e s S t ü t z k r e u z e s s i n d d i e B r e t t e r u n d d i e S t i f t e als» s o l c h e u n w i c h t i g , e s ist n u r n ö t i g , auf die kleinen L ö c h e r deM befestigte S t ü t z k r e u z , die S e i t e n t e i l e m i t S t i f t e n u n d d i e i n die S t i f t e eingehängten B r e t t e r - d a m i t sind a u c h die V e r b i n d u n g e n b e s c h r i e ben. Diese A b b i l d u n g v o n E i n z e l t e i l e n a u f e i n R e g a l ü b e r m e h rere Stufen e n t h ä l t e t w a s Redundanz. Stiften „ z u s a m m e n g e b a u t e n " Die aus Seitenteilen Seitenteile mit Stiften und „enthalten" schon die kleinen L ö c h e r u n d die a n g e o r d n e t e n S t i f t e , t r o t z d e m werden diese g e s o n d e r t e r w ä h n t . D i e s e R e d u n d a n z n a c h d e r e r sten A b b i l d u n g St Sehr erspart jedoch später, bei den Abbildungen u n d St d a s „ H a n t i e r e n " m i t d e n „ g e s a m t e n " S e i t e n t e i l e n . Diese B e t r a c h t u n g e n h a b e n h o f f e n t l i c h d a s T h e m a S e i t e n t e i l e „ Z u g r i f f " zu h a b e n . E s r e i c h t a l s o , z u m i n d e s t r e i n los Regalbau g i s c h g e s e h e n , d e r T ä t i g k e i t des B r e t t e r - E i n l e g e n s n u r d e n Teil-] präzise g e n u g a b g e h a n d e l t , u m als G r u n d l a g e f ü r d a s n ä c h s t e T e i l - a s p e k t „ A n g e o r d n e t e S t i f t e " des in d e r E n t s t e h u n g kapitel d i e n e n z u k ö n n e n . begriffenen R e g a l s zur Verfügung zustellen, und der T ä t i g k e i t des StützkreuzF e s t s c h r a u b e n s n u r eine L i s t e d e r kleinen L ö c h e r d e r Seitenteile» O d e r n o c h e i n m a l a n d e r s f o r m u l i e r t : D i e B e z u g s p u n k t e , d . h . die Schnittstellen, zwischen den mit Stiften versehenen Seitenteilen u n d den B r e t t e r n sind die angeordneten Stifte, zwischen Seitenteilen u n d S t ü t z k r e u z s i n d e s die kleinen L ö c h e r d e r S e i t e n t e i l e . Aufg r u n d dieser Ü b e r l e g u n g e n lassen sich d i e A b b i l d u n g e n n o c h e i n m a l umformulieren. > Schrauben Sc£r wir u n s e r n B e i t r a g z u r A u t o m a t i s i e r u n g d e s t ä g l i c h e n L e b e n s liefern u n d d a s S t e u e r p r o g r a m m f ü r e i n e n R o b o t e r e n t w e r f e n , d e r Regale z u s a m m e n b a u t . D a z u w i r d es n ö t i g s e i n , d i e m a t h e m a t i schen D a r s t e l l u n g d e r A b b i l d u n g e n v o m v o r h e r i g e n A b s c h n i t t i n Die kleine I Löcher angeordnete Stifte Verbindungen W i e lassen sich d i e V e r b i n d u n g e n i n n e r h a l b d e s R e g a l s d a r s t e l l e n ? 1 § ? Regal Lassen wir u n s e r e r I n t u i t i o n ein w e n i g A u s l a u f : V e r b i n d u n g e n z w i - I oder Rillen u n d S t i f t e n o d e r S c h r a u b e n , d i e m a n in diese A u s - mit Stiften Bretter Da wir uns ü b e r die S t u p i d i t ä t d e s R e g a l b a u e n s ä r g e r n , wollen befestigtes Stützkreuz Seitenteile Seitenteile Programmierung ein P R O L O G - P r o g r a m m zu ü b e r f ü h r e n . Stützkreuz Stifte 7.1.2 schen zwei T e i l o b j e k t e n d e s R e g a l s k o n s t i t u i e r e n s i c h a u s L ö c h e r n S.t . eingehängte Bretter s p a r u n g e n s t e c k t b z w . s c h r a u b t . A l s A n a l o g i e d a z u g i b t es a u f der P R O L O G - E b e n e e i n e r s e i t s d i e V a r i a b l e n , d i e w i r als N a m e n von „ K ä s t e n " k e n n e n g e l e r n t h a b e n , u n d a n d e r e r s e i t s n i c h t v a r i a b l e 74 KAPITEL 7. PROGRAMMIERTECHN; S t r u k t u r e n , die e b e n s o l c h e „ K ä s t e n " füllen. F ü r L ö c h e r u n d Rill 7.1. EIN 75 BEISPIEL Wenn die a t o m a r e n O b j e k t e als F a k t e n in d e r D a t e n b a s i s u n t e r g e - b i e t e t sich a l s o eine D a r s t e l l u n g als V a r i a b l e n a n , f ü r S t i f t e u n bracht w e r d e n , m ü s s e n k o n s e q u e n t e r w e i s e die k o m p l e x e n O b j e k t e S c h r a u b e n eine R e p r ä s e n t a t i o n in F o r m n i c h t v a r i a b l e r S t r u k t u r e durch R e g e l n d a r g e s t e l l t w e r d e n . N e h m e n w i r a n , j e d e s k o m p l e x e V e r b i n d u n g e n schaffen heißt d a n n , V a r i a b l e n z u i n s t a n t i i e r e n . Di Objekt „ w e i ß " , w e l c h e s s e i n e „ d i r e k t e n " T e i l o b j e k t e s i n d . R e g a l e T a t s a c h e , d a ß zwei O b j e k t e m i t e i n a n d e r v e r b u n d e n s i n d , w i r d d bestehen g e m ä ß d e r z u l e t z t d u r c h r e p r ä s e n t i e r t , d a ß sich die P R O L O G - D a r s t e l l u n g e n dung a u s zwei S e i t e n t e i l e n , B r e t t e r n u n d e i n e m S t ü t z k r e u z . D a m i t dies O b j e k t e V a r i a b l e n i n s t a n t i i e r u n g e n teilen. Z u m B e i s p i e l m u ß di V a r i a b l e , die f ü r d i e E c k r i l l e e i n e s B r e t t e s s t e h t , m i t derselben S t r u k t u r i n s t a n t i i e r t sein wie die V a r i a b l e , d i e d a s e n t s p r e c h e n d ' L o c h a m S e i t e n t e i l r e p r ä s e n t i e r t , a u f d a s dieses E c k z e i g t . D a s zweistellige P r ä d i k a t stecken, d a s e i n e n S t i f t u n d ei L o c h z u e i n a n d e r in B e z u g s e t z t u n d d a s d r e i s t e l l i g e P r ä d i k a t v e r s c h r a u b e n , d a s eine S c h r a u b e , ein L o c h d e s S e i t e n t e i l s u n d e' erwähnten mathematischen Abbil- läßt sich d a s G r u n d g e r ü s t f ü r die P R O L O G - D a r s t e l l u n g f e s t l e g e n : regal(Regal):seitenteile(Seitenteile), bretter(Bretter), stuetzkreuz(Stuetzkreuz), Regal = r(Seitenteile,Bretter,Stuetzkreuz) . L o c h des S t ü t z k r e u z e s in R e l a t i o n s e t z t , l a u t e n d a n n s o : Oben w u r d e j e d o c h e r w ä h n t , d a ß s i c h S e i t e n t e i l e u n d B r e t t e r d i e verschrauben(X,X,X). „angeordneten Stifte" u n d d a ß sich Seitenteile u n d S t ü t z k r e u z die kleinen L ö c h e r d e s S t ü t z k r e u z e s stecken(X.X). teilen. D e r R u m p f des P r ä d i - kats r e g a l m u ß u m g e s c h r i e b e n w e r d e n , d a m i t d i e s e r I n f o r m a t i onstransport über Variablen ermöglicht wird: Die Objekte Der erste Schritt zur Darstellung der verschiedenen Objekte P R O L O G ist d e r e n U n t e r t e i l u n g in a t o m a r e u n d k o m p l e x e Obr regal(Regal):Seitenteile(KleineLoecher, AngeordneteStifte, j e k t e , e n t s p r e c h e n d d e r U n t e r s c h e i d u n g z w i s c h e n a t o m a r e n undkomplexen Strukturen. Als a t o m a r wollen wir diejenigen OH j e k t e a n s e h e n , die keine „ U n t e r o b j e k t e " b e s i t z e n , a l s o n i c h t wei t e r s t r u k t u r i e r t s i n d . Alles a n d e r e sind k o m p l e x e O b j e k t e , derenS t r u k t u r noch genauer beschrieben werden m u ß . • atomare • komplexe Objekte: Objekte: Stifte u n d S c h r a u b e n Stützkreuz, B r e t t e r , Seitenteile D i e R e p r ä s e n t a t i o n f ü r die a t o m a r e n O b j e k t e ist e i n f a c h : w i r t r a g e n zwei F a k t e n stifte u n d s c h r a u b e n in die W i s s e n s b a s i s ein. J e d e r d e r zwölf S t i f t e u n d j e d e d e r v i e r S c h r a u b e n e r h ä l t z u r K e n n z e i c h n u n g ein P R O L O G - A t o m als N a m e n . Stifte([stl,st2,st3,st4,st5,st6•, St7,st8,st9,stl0,stll,stl2]). schrauben([sl,s2,s3,s4]). Seitenteile), bretter(AngeordneteStifte,Bretter), stuetzkreuz(KleineLoecher,Stuetzkreuz), Regal = r(Seitenteile,Bretter,Stuetzkreuz). Das P r ä d i k a t r e g a l e n t h ä l t k e i n e H i n w e i s e , w i e m i t S t i f t e n v e r sehene S e i t e n t e i l e o d e r S e i t e n t e i l e ü b e r h a u p t a u s s e h e n . D i e s o b liegt d e m P r ä d i k a t Seitenteile selbst: M a n n e h m e die Stifte, stecke d a v o n so viele w i e n ö t i g in d a s n ä c h s t l i e g e n d e Seitenteil und d e n R e s t in d a s ü b r i g e S e i t e n t e i l . W e n n m a n die r i c h t i g e Zahl v o n S t i f t e n d e r r i c h t i g e n Z a h l v o n g r o ß e n L ö c h e r n zuge- ordnet h a t , k a n n m a n m i t t e l s s t e c k e n d i e V e r b i n d u n g e i n e r L i ste v o n S t i f t e n m i t e i n e r L i s t e v o n L ö c h e r n a u f e i n M a l e r z i e len, d a n n l a s s e n sich a u c h k o m p l e x e r e Strukturen miteinander unifizieren. D i e A n o r d n u n g d e r S t i f t e w i r d f e s t g e h a l t e n in v i e r Listen, d . h . für j e d e s S e i t e n t e i l zwei V e r z e i c h n i s s e , w e l c h e S t i f t e 76 KAPITEL 7. PROGRAMMIERTECHK 7.1. entlang der vorderen u n d welche entlang der hinteren Lochreih EIN 77 BEISPIEL stifte_stecken(Stifte, g e s t e c k t w u r d e n . A u ß e r d e m w e r d e n w i r b e i m B e t a s t e n d e r Sei Reststiftel, t e n t e i l e gleich n o c h die kleinen L ö c h e r j e d e s S e i t e n t e i l s lokalisie StifteVorne, r e n . E i n Seitenteil definiert sich d a n n z u m B e i s p i e l a l s ein Teni GrosseLoecher, stl(AngeordneteStifte.KleineLoecher). RestLoecherl), stifte_stecken(Reststiftel, stifte_stecken([Stift 1,Stift2,Stift3|RestStifte] , Reststifte, Reststifte, StifteHinten, [Stiftl,Stift2,Stift3], RestLoecherl, [Lo c h 1 1 , L o c h 1 2 , L o c h 1 3 1 R e s t L o e c h e r ] , • ), RestLoecher):stecken([Stiftl,Stift2,Stift3], ' [Lochl, Loch2, Loch3] ).. Seitenteile(Loecher,AngeordneteStifte,Seitenteile):stifte(Stifte), Seitenteil(Stifte, AngeordneteStifte = [StifteVorne,StifteHinten], Seitenteil = stl(AngeordneteStifte,KleineLoecher). Ein B r e t t w i r d d u r c h d e n v i e r s t e l l i g e n T e r m b ( R l , R 2 , R 3 , R 4 ) d a r gestellt, wobei die v i e r A r g u m e n t e d i e v i e r R i l l e n b e d e u t e n . Reststifte, der vier L i s t e n r ä u m l i c h a n g e o r d n e t e r S t i f t e j e w e i l s d a s e r s t e , d . h . KleineLoecherl, das „ o b e r s t e " E l e m e n t w e g g e n o m m e n w i r d u n d d i e s e v i e r S t i f t e in AngeordneteStiftel, die Rillen „ g e s t e c k t " w e r d e n . M i t d e n v e r b l i e b e n e n S t i f t e n w e r d e n Seitenteiii), die restlichen B r e t t e r „ e i n g e h ä n g t " . D i e s e L i s t e n r e k u r s i o n e r l a u b t Seitenteil(Reststifte, uns, m a x i m a l soviele B r e t t e r e i n z u h ä n g e n , w i e S t i f t e v o r h a n d e n •. sind. KleineLoecher2, Loecher = AngeordneteStifte2, '/• E n d e : Seitenteil2), bretter([[[], []],[[], []]],[])• [KleineLoecherl,KleineLoecher2], AngeordneteStifte = [AngeordneteStiftel,AngeordneteStifte2], \ Seitenteile Das E i n h ä n g e n eines B r e t t e s w i r d d a d u r c h n a c h g e s p i e l t , d a ß v o n j e d e r = [Seitenteiii,Seitenteil2]. Seitenteil(Stifte, Reststifte, KleineLoecher, AngeordneteStifte, Seitenteil):- ! keine Stifte mehr vorhanden KAPITEL 78 7. 7.2. PROGRAMMIERTECH. 79 PROGRAMMENTWURF-RICHTLINIEN stuetzkreuz(SeitenteilLoecher, '/, Rekursion: 7, Nimm v o n a l l e n 4 Listen das erste sk(StuetzkreuzLoecher)):- Element schrauben(Schrauben) bretter([[StifteHintenLinks, SeitenteilLoecher StifteVorneLinks], FlacheListe [StifteHintenRechts, = = [[Lochl,Loch2],[Loch3,Loch4]], [LochlI[Loch2I[Loch3,Loch4]]] , verschrauben(Schrauben, StifteVorneRechts]], FlacheListe, [Brett I B r e t t e r ] ) : - StuetzkreuzLoecher). brett(StifteHintenLinks, ReststifteHL, Die A n f r a g e a n diese W i s s e n s b a s i s , wie d e n n n u n e i n R e g a l a u s - StifteVorneLinks, sehe, f ü h r t zu f o l g e n d e r A n t w o r t ReststifteVL, schön f o r m a t i e r t ) : St i f t eHint enRecht s , regal(Regal). Reststif'teHR, Regal = (hier wegen der Leserlichkeit r([stl([[stl,st2,st3], StifteVorneRechts, [st4,st5,st6]], ReststifteVR, [sl,s2]), Brett), Stl([[st7,st8,st9], bretter([[ReststifteHL, [stl0,stll,stl2]], ReststifteVL], [s3,s4])], [ReststifteHR, [b(stl,st4,st7,stl0), ReststifteVR]], b(st2,st5,st8,stll), Bretter) . b(st3,st6,st9,stl2)] , Sk([sl,s2,s3,s4])) b r e t t ( [ S t i f t 11 S t i f t e H L ] , StifteHL, [Stift2lStifteVL] , 7.2 StifteVL, [Stift3|StifteHR], Es folgt n u n eine A r t C h e c k l i s t e , die eine H i l f e s t e l l u n g b e i m P r o - StifteHR, g r a m m e n t w u r f g e b e n soll. D i e d a b e i a n f a l l e n d e n A r b e i t e n l a s s e n [Stift4|StifteVR], s StifteVR, b(Rillel,Rille2,Rille3,Rille4)) Programmentwurf-Richtlinien ' c h in folgende A u f g a b e n g e b i e t e g r u p p i e r e n , d i e n i c h t u n b e d i n g t nacheinander s o n d e r n u n t e r e i n a n d e r a b w e c h s e l n d erfüllt w e r d e n :- stecken([Stiftl,Stift2,Stift3,Stift4], [Rillel,Rille2,Rille3,Rille4]). müßen: • Konzeptioneller E n t w u r f • Realisierung/Programmierung • Testen Z u m Schluß v e r b i n d e t d a s S t ü t z k r e u z m i t t e l s d e r S c h r a u b e n kleinen L ö c h e r d e r S e i t e n t e i l e m i t seinen e i g e n e n k l e i n e n Loch • Fehlersuche und -behebung • Dokumentation 80 KAPITEL 7.2.1 7. PROGRAMMIERTECHN Konzeptioneller Entwurf Entwurf 81 PROGRAMMENTWURF-RICHTLINIEN • d a ß n u r gewisse T e i l o p e r a t i o n e n u n t e r s u c h t w e r d e n D e r e i g e n t l i c h e n K o d i e r - u n d T e s t a r b e i t a n d e r M a s c h i n e sollt u n b e d i n g t ein konzeptioneller 7.2. v o r a u s g e h e n . D a s Ziel d k o n z e p t i o n e l l e n E n t w u r f s ist es, sich ü b e r d a s z u behandelnd P r o b l e m u n d dessen R e a l i s i e r u n g s m ö g l i c h k e i t e n k l a r z u w e r d e n Oft zeigt sich bei d e r d e t a i l l i e r t e n B e s c h r e i b u n g e i n e r P r o b l e m s t e l lung, d a ß d a s P r o b l e m e i n e m f r ü h e r g e s c h r i e b e n e n u n d e v e n t u e l l schon g e l ö s t e n P r o b l e m s t r u k t u r e l l ä h n l i c h i s t . Hilfreich sind hierfür sowohl rein v e r b a l e als a u c h g r a p h i s c h e undlj f o r m a l e B e s c h r e i b u n g e n der O b j e k t e u n d O p e r a t i o n e n a u f d e n O b - f j e k t e n , die erfolgen sollen. Ü b e r v e r s c h i e d e n e Verfeinerung»ftufen\ d e r B e t r a c h t u n g s w e i s e hinweg sollten z u m i n d e s t a u f f o l g e n d e Frag e n A n t w o r t e n gefunden w e r d e n : \ 1 . W i e sieht d e r A u s g a n g s z u s t a n d a u s ? 7.2.2 Realisierung ( a ) W e l c h e O b j e k t e spielen e i n e R o l l e ? Die U m s e t z u n g des k o n z e p t i o n e l l e n E n t w u r f s in ein ( b ) W i e s t e h e n diese O b j e k t e z u e i n a n d e r i n B e z u g ? wird a u c h R e a l i s i e r u n g g e n a n n t . E s ist h i l f r e i c h , d i e in j e d e r V e r - 2 . W i e sieht d e r Z i e l z u s t a n d a u s ? ( a ) W e l c h e O b j e k t e sollen e r z e u g t w e r d e n ? ( b ) W i e s t e h e n diese O b j e k t e z u e i n a n d e r in B e z u g ? ( c ) W e l c h e A r b e i t s v o r g ä n g e w e r d e n f ü r d i e s e Inbezugsetzung benötigt? (d) Welche „Werkzeuge" braucht m a n d a z u ? ( e ) W e l c h e B e a r b e i t u n g s f o l g e b i e t e t sich a n ? ( D i e s e F r a g e Programm feinerungstufe e r z i e l t e n B e s c h r e i b u n g e n e i n z e l n a n h a n d d e r b e i d e n folgenden F r a g e n n a c h P R O L O G z u ü b e r s e t z e n . 1. W i e sollen die O b j e k t e r e p r ä s e n t i e r t werden? 2. W i e sollen die B e z i e h u n g e n z w i s c h e n O b j e k t e n d a r g e s t e l l t werden? Die A r b e i t läßt sich n o c h w e i t e r e r l e i c h t e r n , w e n n m a n f o l g e n d e Hinweise b e a c h t e t : spielt in P R O L O G i m a l l g e m e i n e n k e i n e s e h r heraus-^ ragende Rolle.) B e i k o m p l i z i e r t e n A u f g a b e n s t e l l u n g e n s i n d V e r f e i n e r u n g s t u f e n in \ d e r B e s c h r e i b u n g nötig, u m nicht „ v o r l a u t e r B ä u m e n d e n B l i c k a u f d e n W a l d " z u verlieren. U m w e i t e r i m B i l d z u s p r e c h e n : Auf, e i n e r B e t r a c h t u n g s e b e n e m a g es a u s r e i c h e n , d e n W a l d a l s G a n z e s z u b e t r a c h t e n u n d die B ä u m e zu v e r n a c h l ä ß i g e n , a u f e i n e r a n d e r e n ] w i r d es n ö t i g sein, a u f seine B e s t a n d t e i l e , d i e B ä u m e n ä h e r einz u g e h e n . E i n Ü b e r g a n g v o n einer V e r f e i n e r u n g s t u f e z u r n ä c h s t e n z e i c h n e t sich z u m Beispiel d a d u r c h a u s , • Die F a l l u n t e r s c h e i d u n g e n für die einzelnen Klauseln von P r ä d i k a t e n e r g e b e n sich m e i s t a u s d e r S t r u k t u r d e r O b j e k t e ( z . B . a t o m a r e Objekte versus s t r u k t u r i e r t e O b j e k t e ) . • Die V e r a r b e i t u n g s t r u k t u r i e r t e r O b j e k t e v e r l ä u f t oft r e k u r siv ü b e r d e r e n S t r u k t u r . • Die H i e r a r c h i e d e r A b s t r a k t i o n s e b e n e n s o l l t e s i c h in der Hierarchie der Prädikatsaufrufe widerspiegeln. • Soweit sinnvoll und möglich, (Über den sollte „reines" vollen Sprachumfang verwendet werden. • d a ß O b j e k t e detaillierter b e s c h r i e b e n w e r d e n PROLOG, der über „reines" P R O L O G • d a ß n u r gewisse Teilobjekte b e t r a c h t e t w e r d e n später geredet.) PROLOG hinausgeht, von wird KAPITEL 82 7.2.3 7. PROGRAMMIERTECHN Programmtest 7.2. PROGRAMMENTWURF-RICHTLINIEN 83 • W i r d das P r o g r a m m v o m P R O L O G - I n t e r p r e t e r nicht k o m m e n t a r l o s e i n g e l e s e n , s p r i c h t m a n v o n Syntaxfehlern. U m n a c h z u w e i s e n , d a ß d a s e n t w i c k e l t e P r o g r a m m seine A u f g a b e n Die h ä u f i g s t e n S y n t a x f e h l e r sind: e r f ü l l t , sollte a u f v e r s c h i e d e n e A r t e n g e t e s t e t w e r d e n : — D e r P u n k t u n d d e r Z e i l e n v o r s c h u b fehlen a m E n d e ei- • T e s t s für d e n a l l g e m e i n e n ( t y p i s c h e n ) F a l l ner Klausel. • T e s t s für R a n d f ä l l e , A u s n a h m e n u n d e v e n t u e l l für falsche — Die Z a h l d e r s c h l i e ß e n d e n u n d d i e Z a h l d e r ö f f n e n d e n E i n g a b e n d u r c h den B e n u t z e r K l a m m e r n e n t s p r e c h e n sich n i c h t . D i e s k a n n b e s o n d e r s bei K o m m e n t a r k l a m m e r n / * . . . * / h e i m t ü c k i s c h e A u s - T e s t s k ö n n e n F e h l e r a u f d e c k e n , d e r e n B e h e b u n g Ä n d e r u n g e n im wirkungen haben. P r o g r a m m k o d e e r f o r d e r n , w e n n nicht s o g a r Ä n d e r u n g e n i m konz e p t i o n e l l e n E n t w u r f ( w e n n beispielsweise R a n d f ä l l e — E i n Leerzeichen zwischen P r ä d i k a t n a m e n u n d vergessen erster w u r d e n ) . E r f o l g r e i c h v e r l a u f e n e T e s t s s i n d j e d o c h n o c h keine G a - öffnender K l a m m e r mißfällt v i e l e n P R O L O G - I n t e r p r e - rantie, daß das P r o g r a m m i m m e r korrekt a r b e i t e t . tern. 7.2.4 • W e n n d a s P r o g r a m m nicht l ä u f t ( d . h . n u r s t u r m i t n o a n t - Fehlerbehebung w o r t e t ) o d e r n i c h t d a s t u t , w a s es t u n s o l l t e , s o l l t e n f o l g e n d e P u n k t e überprüft werden: Die beste M e t h o d e , Fehler zu „behandeln", ist, durch achtsames V o r g e h e n die Z a h l d e r F e h l e r e i n z u s c h r ä n k e n . D i e B e a c h t u n g folg e n d e r R e g e l n dient d e r Fehlervorbeugung — S i n d alle P r ä d i k a t s - u n d V a r i a b l e n n a m e n , die f ü r d a s : Gleiche s t e h e n a u c h gleich g e s c h r i e b e n ? — Ist die A r g u m e n t z a h l u n d d i e R e i h e n f o l g e d e r A r g u - • E r s t e l l u n g eines o r d e n t l i c h e n k o n z e p t i o n e l l e n E n t w u r f s m e n t e eines b e s t i m m t e n P r ä d i k a t s bei allen s e i n e n E r - • übersichtliche Darstellung der P r ä d i k a t e : wähnungen eingehalten? — P a s s e n L i s t e n u n d T e r m e , die m i t e i n a n d e r — Kommentare! — Faustregel: — S t i m m t die Z u o r d u n g v o n öffnenden u n d schließenden Nicht m e h r als 5 bis 7 K l a u s e l n p r o P r ä d i k a t s d e f i n i t i o n , sonst ein Unterprädikat — Da P R O L O G durchsucht, die D a t e n b a s i s v o n oben n a c h empfiehlt Klammern? einführen. sich f o l g e n d e unten Anordnung der K l a u s e l n in e i n e r P r ä d i k a t s d e f i n i t i o n : 1. unifiziert w e r d e n s o l l e n , a u c h wirklich a u f e i n a n d e r ? Abbruchbedingung(en) 2. S o n s t i g e K l a u s e l n 3. A l l g e m e i n s t e r F a l l Es gibt eine R e i h e eingebauter Prädikate, die die Fehlersuche un- t e r s t ü t z e n , wie z u m B e i s p i e l : • • trace s py Die A r b e i t s w e i s e d i e s e r b e i d e n u n d w e i t e r e r debugging-Pra.dika.te W e n n sich t r o t z a l l e m F e h l e r e i n g e s c h l i c h e n h a b e n , sollte m a n für wurde b e r e i t s in K a p i t e l 4 a n g e d e u t e t u n d ist in d e n H a n d b ü c h e r n d i e Fehlersuche und d e r e i n s c h l ä g i g e n L i t e r a t u r b e s c h r i e b e n . folgende P u n k t e im A u g e h a b e n : KAPITEL 84 7.2.5 7. PROGRAMMIERTECHNL Dokumentation d i g d o k u m e n t i e r t w e r d e n . D e r k o n z e p t i o n e l l e E n t w u r f z ä h l t dabei s c h o n als d e r e r s t e Teil d e r D o k u m e n t a t i o n . D i e V o r t e i l e a u s f ü h r l i c h e r D o k u m e n t a t i o n liegen a u f d e r H a n d : Entwurf nig f o r m a l i s i e r t e n W i s s e n s , z u t u n . Z u m B e i s p i e l ist es i m Falle des R e g a l b a u s k e i n e s w e g s k l a r , w a r u m g e r a d e diese R e p r ä s e n t a tion f ü r R e g a l e u n d i h r e B e s t a n d t e i l e g e w ä h l t w u r d e u n d n i c h t eine e r s p a r t I r r w e g e in d e r P r o - Darstellung f ü r ein R e g a l b e l e u c h t e t n u r g e w i s s e A s p e k t e eines Regals, die r ä u m l i c h e n E i g e n s c h a f t e n s i n d z u m B e i s p i e l e t w a s zu kurz g e k o m m e n . • eine A r t Tagebuch ü b e r die E n t w i c k l u n g b e w a h r t d a v o r , den- selben Irrweg zweimal zu g e h e n einem Wissensrepräsenta- tion , d e r L o g i k - D a r s t e l l u n g v o n A s p e k t e n a l l t ä g l i c h e n , m e i s t we- andere. D e r Z w e c k heiligt a u c h h i e r die M i t t e l . U n s e r e P R O L O G - grammierung • bei ÜBUNGEN P r o g r a m m i e r u n g in P R O L O G h a t viel m i t A l l e v e r s c h i e d e n e n Stufen der P r o g r a m m e n t w i c k l u n g s o l l t e n s t ä n - • ein g u t e r konzeptioneller 7.4. gut dokumentierten I n s g e s a m t w u r d e eine L e i t l i n i e f ü r die P r o g r a m m e n t w i c k l u n g vorgestellt. D i e K r e a t i v i t ä t , die I d e e n h e r v o r b r i n g t , Programm besteht die funktioniert wohl e t w a s s p r u n g h a f t e r u n d u n s y s t e m a t i s c h e r . Chance, daß andere Leute (und m a n selbst), das P r o g r a m m jederzeit v e r s t e h e n u n d e r w e i t e r n k ö n n e n 7.4 Übungen B e r e i t s die V e r w e n d u n g k l i n g e n d e r N a m e n f ü r P r ä d i k a t e u n d der e n A r g u m e n t e trägt zur D o k u m e n t a t i o n bei. A u ß e r d e m empfiehlt es sich, v o r j e d e r ( w i c h t i g e n ) P r ä d i k a t s d e f i n i t i o n e i n e n K o m m e n t a r k a s t e n folgender A r t einzufügen u n d e n t s p r e c h e n d a u s z u f ü l l e n : Übung 7.1 Sie sie! Folgendes Prädikat enthält einige Fehler. Permute(Liste,[ErstesIElement Beheben IRest]):- append(Listel,[ErstesElementlListe2].Liste), '/. Prädikat V. Argumente des P r ä d i k a t s append(Listel,Liste2,L3ite3), und d e r e n permute(Liste3,Rest,Rest1). Struktur permute([],[]). '/. V, Beschreibung der Arbeitsweise des */. 7, 7.3 Abbruchbedingung append([] . L i s t e , L i s t e ) Prädikats append( [ E r s t e s E l e m e n t I R e s t ] , X '/. /* Beispiele für Aufrufe und z u g e h ö r i g e Antworten Liste, [ErstesElementIListel]):- Besondere Hinweise, Warnungen, append(Rest.Liste). Ausnahmen Übung 7.2 Zusammenfassung D e r „ R o h s t o f f " , m i t d e m P r o g r a m m i e r e r a r b e i t e n , ist F e r t i g e n S i e e i n e n k o n z e p t i o n e l l e n E n t w u r f f ü r fol- gende Idee u n d r e a l i s i e r e n Sie i h n als P r o g r a m m . InformM t i o n . D a s W e s e n v o n I n f o r m a t i o n ist i h r e S t r u k t u r . G e n a u s o w i j Wee: „ D e r g r o ß e Z a u b e r e r u n d seine G e h i l f e n " e i n W e r k s t ü c k v o n e i n e m B e a r b e i t u n g s z u s t a n d in d e n Der große Z a u b e r e r v e r w a n d e l t D i n g e : nächste überführt werden kann, kann Information von einer A r t v o n StrukJ t u r i e r t h e i t in eine a n d e r e ü b e r f ü h r t w e r d e n . Dokumentation °nd Tests nicht vergessen! • einen g e l b e n Z a u b e r s t a b in drei r o t e T ü c h e r 86 KAPITEL 7. PROGRAMMIERTECHK • s c h w a r z e H a s e n m i t weißen O h r e n u n d b l a u e n Augen weiße H a s e n m i t weißen O h r e n u n d r o t e n A u g e n • b r a u n e H a s e n w e r d e n z u e r s t i n b l a u e H ü t e , u n d d a n n an schließend in g r ü n e Z a u b e r s t ä b e m i t s c h w a r z e m G r i f f un weißer S p i t z e v e r w a n d e l t Teil II • g e l b e M ü t z e n w e r d e n m a n c h m a l in s c h w a r z e H ü t e , m a n c h m a l in G e l d s t ü c k e v e r w a n d e l t . A u ß e r d e m ist z u b e m e r k e n , d a ß d e r g r o ß e Z a u b e r e r eigentlich n i c h t s selbst m a c h t , s o n d e r n die A r b e i t a n s e i n e , a u f b e s t i m m t e D i n g e s p e z i a l i s i e r t e n Gehilfen a b g i b t . Ü b u n g 7 . 3 E n t w e r f e n Sie ein P r o g r a m m , d a s f o l g e n d e n W o r t s a l a t sinnvoll z u e i n e m S a t z a n o r d n e n k a n n : katze, m a u s , die, einer, nach, sucht Linguistische Anwendungen Kapitel 8 Syntaxanalyse In diesem K a p i t e l wollen w i r ein P R O L O G - P r o g r a m m e n t w i c k e l n , das für einfache e n g l i s c h e S ä t z e ü b e r p r ü f t , o b d i e s e g r a m m a t i k a lisch korrekt sind. D a z u m ü s s e n w i r z u n ä c h s t k l ä r e n , w a s u n t e r grammatikalisch 8.1 korrekt zu verstehen ist. Kontextfreie Grammatiken Um uns die A r b e i t f ü r d e n A n f a n g s o l e i c h t w i e m ö g l i c h z u m a chen, n e h m e n w i r a n , d a ß sich d a s z u b e h a n d e l n d e F r a g m e n t d e r englischen S p r a c h e d u r c h e i n e k o n t e x t f r e i e G r a m m a t i k ben läßt. beschrei- 90 KAPITEL 8. 8.1. SYNTAXANALYS. Beispiel 8.1 E i n e G r a m m a t i k beschreibt formal e x a k t , wie sich j e d e Kon stituente der Sprache aus anderen K o n s t i t u e n t e n zusammensetzt.! Z u m B e i s p i e l b e s t e h t der e i n f a c h e H a u p t s a t z 1. S m D i e s k a n n d u r c h die R e g e l ß. S -> NP V P d u k t i o n e n sind ein B e s t a n d t e i l einer kontextfreien Grammatik. -m 1. E i n e r M e n g e v o n Terminalsymbolen 2. E i n e r M e n g e v o n 3. Einer Menge von Das Lexikon H Produktionen Nichtterminalsymbol, dem Start symbol Sprache. Nichtterminalsymbole sind die B e z e i c h n u n g e n f ü r die K o n s t i t u e n t e n . D a s S t a r t s y m b o l ist in d e r R e g e l S, d a w i r S ä t z e a n a l y s i e r e n wollen. Produktionen bestehen aus einem N i c h t t e r m i n a l s y m b o l , Seite, ge; e i n e m Pfeil u n d e i n e r F o l g e v o n T e r m i n a l - o d e r N i c h t t e r m i n a l s y m b o l e n , der rechten Seite. Die B e z e i c h n u n g „ k o n t e x t f r e i " f ü r d i e s e G r a m m a t i k e n d e u t e t a n , d a ß es n i c h t m ö g l i c h ist, f ü r die A n w e n d b a r k e i t v o n P r o d u k - * t i o n e n K o n t e x t b e d i n g u n g e n a n z u g e b e n . D i e s w ä r e z . B . möglich, w e n n m a n a u f d e r linken Seite v o n P r o d u k t i o n e n m e h r a l s n u r e u l || einzelnes N i c h t t e r m i n a l s y m b o l a n g e b e n k ö n n t e . G r a m m a t i k e n , die '" N the DET N loves V woman N eats V man N sings V apple N Sprache c h a r a k t e r i s i e r t ? U m dies e x a k t wir den B e g r i f f d e r Ableitung minalsymbole zu verwenden. S t a t t d e s s e n werden die Wörter eingeteilt. D i e s e w e r d e n d a n n in d e n P r d u k t i o n e n v e r w e n d e t . M a n b e z e i c h n e t sie oft a l s bole. Die E i n t e i l u n g geschieht in e i n e m Lexikon. PräterminalsymDabei W o r t auch mehreren Kategorien zugeordnet werden. kann zu beschreiben, eine führen ein. E i n S a t z ist g e n a u d a n n in d e r v o n e i n e r k o n t e x t f r e i e n G r a m matik erzeugten duktionen Sprache gibt, deren e n t h a l t e n , w e n n es e i n e F o l g e v o n P r o sukzessive Anwendung ausgehend vom Startsymbol g e r a d e diesen Satz ergibt. Die F o l g e dieser P r o d u k tionsanwendungen h e i ß t Beispiel 8 . 2 Ableitung. B e t r a c h t e n w i r w i e d e r d e n S a t z J o h n e a t s t h e apple. Eine m ö g l i c h e A b l e i t u n g ist: (1) In d e r L i n g u i s t i k ist es üblich, in d e n P r o d u k t i o n e n k e i n e T e r ; Kategorien Ableitung Auf welche W e i s e g e n a u w i r d n u n d u r c h e i n e G r a m m a t i k dies e r l a u b e n , h e i ß e n d a n n „ k o n t e x t s e n s i t i v " . lexikalische mary john 8.1.1 T e r m i n a l s y m b o l e sind in u n s e r e m F a l l die W ö r t e r d e r englischen sei g e g e b e n d u r c h f o l g e n d e W ö r t e r u n d i h r e s y n t a k - tischen K a t e g o r i e n : Nichtterminalsymbolen 4. E i n e m ausgezeichnetem n a n n t linke 5. V P - » V »: ponenten: DET N 4. V P —• V N P Pro- I n s g e s a m t b e s t e h t eine k o n t e x t f r e i e G r a m m a t i k a u s v i e r K o r n S besteht: 3. N P — N \ a u s g e d r ü c k t w e r d e n . E i n e s o l c h e R e g e l h e i ß t a u c h Produktion. a n , die a u s f o l g e n d e n Produktionen NP VP 2. N P • a u s d e r N o m i n a l p h r a s e John u n d d e r V e r b a l p h r a s e e a t s t h e applefl 91 GRAMMATIKEN F ü r unser ( M i n i - ) F r a g m e n t des Englischen n e h m e n wir eine Grammatik 1 J o h n e a t s t h e apple KONTEXTFREIE S (3) (4) (2) NP VP => N V P N V NP =>• N V D E T N Die K e t t e d e r P r ä t e r m i n a l s y m b o l e p a ß t a u f d e n S a t z . D a m i t ist John e a t s t h e . a p p l e g e m ä ß u n s e r e r G r a m m a t i k e i n k o r r e k t e r S a t z . KAPITEL 92 8. SYNTAXANALYSE 8.1. KONTEXTFREIE 8.1.2 D i e A n g a b e e i n e r A b l e i t u n g ist ein B e w e i s , d a ß e i n e gege^ GRAMMATIKEN Syntaxbäume b e n e E i n g a b e k e t t e z u d e r durch, die G r a m m a t i k e r z e u g t e n S p r a c h e gehört. } Z u e i n e m S a t z d e r S p r a c h e g i b t es in d e r R e g e l m e h r a l s eine A b l e i t u n g . I m o b i g e n B e i s p i e l k ö n n e n w i r a u c h die P r o d u k t i o n ( 4 ) v o r d e r P r o d u k t i o n ( 3 ) a n w e n d e n u n d e r h a l t e n die f o l g e n d e ; A b l e i t u n g für den S a t z J o h n e a t s t h e apple: 9 (2) (3) (4) (1) l NP VP NP V NP Wir b e n ö t i g e n also e i n e g e e i g n e t e D a r s t e l l u n g , d i e es u n s e r l a u b t , N V NP von der R e i h e n f o l g e d e r P r o d u k t i o n s a n w e n d u n g e n z u a b s t r a h i e - N V DET N ren u n d n u r die K o n s t i t u e n t e n s t r u k t u r e i n e s S a t z e s d a r z u s t e l l e n . U n d es gibt s o g a r n o c h e i n e w e i t e r e A b l e i t u n g ! Genau d a s ist die A u f g a b e eines Bäume Syntaxbaumes. s i n d D a t e n s t r u k t u r e n , die d a z u d i e n e n , hierarchische Strukturen d a r z u s t e l l e n . D i e K o n s t i t u e n t e n s t r u k t u r e i n e s S a t z e s ist ein t y p i s c h e s B e i s p i e l für e i n e h i e r a r c h i s c h e S t r u k t u r . D a h e r ist ein B a u m ein g e e i g n e t e s B e s c h r e i b u n g s m i t t e l d a f ü r . E i n Syntaxbaum stellt g r a p h i s c h d a r , w i e e i n S a t z a u s g e h e n d vom S t a r t s y m b o l d e r G r a m m a t i k a b g e l e i t e t w e r d e n k a n n . W e n n für die E r s e t z u n g des N i c h t t e r m i n a l s y m b o l e s S die Produktion S -» N P V P angewandt wird, so erhalten wir einen S y n t a x b a u m mit der Wurzel S u n d d e n Blättern NP und V P : D o c h b e s t e h t ein r e l e v a n t e r U n t e r s c h i e d z w i s c h e n d i e s e n v e schiedenen Ableitungen? Eigentlich sind wir nur a n der entenstruktur Konstitifi eines S a t z e s i n t e r e s s i e r t u n d n i c h t a n d e n v e r s c h i e ß d e n e n Ableitungen. Die K o n s t i t u e n t e n s t r u k t u r eines Satzes ; u n s A u f s c h l u ß d a r ü b e r , w e l c h e Teile d e s S a t z e s m i t e i n a n d e r < E i n h e i t , eine Konstituente, bilden und wie einfache Konstituent zu größeren zusammengefaßt werden. L a s s e n sich für einen ; N P u n d V P s i n d Markierungen verschiedene Konstituentenstrukturen angeben, so kann m a n n d e r R e g e l a u c h v e r s c h i e d e n e B e d e u t u n g e n in d i e s e n S a t z hin l ^ e r g e o r d n e t e Teilbäume l e s e n , d.h. e r h a t v e r s c h i e d e n e Lesarten. b a Im obigen Fall han u m e heißen es s i c h a b e r n u r u m eine u n t e r s c h i e d l i c h e R e i h e n f o l g e d e r A n w a n Knoten ° t e n m i t d e r M a r k i e r u n g S heißt innerer des B a u m e s . Knoten, Der d a er noch hat. K n o t e n o h n e u n t e r g e o r d n e t e Teil- Blätter. W e n n a n e i n e m B l a t t eines B a u m e s e i n N i c h t t e r m i n a l s y m b o l d u n g d e r P r o d u k t i o n e n u n d nicht u m e i n e n U n t e r s c h i e d in 3 Konstituentenstruktur. S e h e n t , so k a n n h i e r ein w e i t e r e r T e i l b a u m f ü r e i n e R e g e l m i t p a s d e r Ünlcer S e i t e e i n g e s e t z t w e r d e n : 94 KAPITEL 8. SYNTAXANALY, GRAMMATIKEN 95 Wir m ü s s e n v o r s i c h t i g sein, w e n n w i r v o n der Konstituentenstruk- 8.1. KONTEXTFREIE 8.1.3 F ü r einen g a n z e n S a t z hat jeder S y n t a x b a u m folgende Eige schaffen: 1 . D i e W u r z e l des S y n t a x b a u m e s ist m i t d e m S t a r t s y m b o l d Ambiguität tur eines S a t z e s g e m ä ß e i n e r G r a m m a t i k r e d e n . E s ist z w a r k l a r , Grammatik markiert daß es z u j e d e m S y n t a x b a u m n u r g e n a u e i n e n S a t z g i b t , d e s s e n K o n s t i t u e n t e n s t r u k t u r e r d a r s t e l l t , a b e r es ist d u r c h a u s m ö g l i c h , 2 . J e d e s B l a t t des S y n t a x b a u m e s ist m i t e i n e m L e x e m m a r k i e r t 3 . J e d e r i n n e r e K n o t e n des S y n t a x b a u m e s ist m i t e i n e m Nichtterminalsymbol markiert daß eine G r a m m a t i k f ü r e i n e n S a t z m e h r e r e S y n t a x b ä u m e z u l ä ß t . 5 I 4 . W e n n ein i n n e r e r K n o t e n m i t d e m N i c h t t e r m i n a l s y m b o l m a r k i e r t ist u n d die u n m i t t e l b a r e n U n t e r k n o t e n m i t M dem In d i e s e m F a l l s p r e c h e n w i r v o n Ambiguität oder Mehrdeutigkeit der G r a m m a t i k u n d a u c h d e s S a t z e s . In d e r R e g e l b e d e u t e n v e r schiedene S y n t a x b ä u m e f ü r e i n e n S a t z , d a ß es v e r s c h i e d e n e L e s arten für d i e s e n S a t z g i b t . S y m b o l e n B , C , . . . , D m a r k i e r t s i n d , s o ist die zugehörige? P r o d u k t i o n A —» B C . . . D 5 . W e n n ein i n n e r e r K n o t e n m i t e i n e m p r ä t e r m i n a l e n S y m b o l m a r k i e r t ist, s o ist d e r u n m i t t e l b a r e U n t e r k n o t e n ein B l a i f mit einem L e x e m dieser K a t e g o r i e Z u j e d e r A b l e i t u n g g i b t es g e n a u e i n e n S y n t a x b a u m . Alle Ab l e i t u n g e n , die d i e s e l b e K o n s t i t u e n t e n s t r u k t u r d a r s t e l l e n , e r g e b e Beispiel 8 . 4 denselben S y n t a x b a u m . einfache P r ä p o s i t i o n a l p h r a s e n s y n t a x e r w e i t e r n . D a z u f ü g e n w i r z u W i r wollen u n s e r F r a g m e n t d e s E n g l i s c h e n u m eine der G r a m m a t i k a u s B e i s p i e l 8 . 1 n o c h f o l g e n d e R e g e l n h i n z u : Beispiel 8.3 D e r S y n t a x b a u m für den Satz John eats the apply ist: 6. P P - > P N P 7. N P - > N P PP 8. V P - > V N P PP Das L e x i k o n w i r d e r w e i t e r t u m f o l g e n d e W ö r t e r u n d i h r e s y n t a k tischen K a t e g o r i e n : worm N with P knife N in P Für den S a t z J o h n e a t s t h e apple with t h e worm g i b t es zwei v e r schiedene S y n t a x b ä u m e . D e r e r s t e g i b t d i e L e s a r t w i e d e r , in d e r John einen w u r m i g e n A p f e l ißt; d e r z w e i t e d a g e g e n b e d e u t e t , d a ß D i e s e r S y n t a x b a u m stellt alle m ö g l i c h e n A b l e i t u n g e n f ü r dies« Satz auf einmal dar. J ° h n m i t e i n e m W u r m e i n e n Apfel ißt. D i e s w ä r e d i e r i c h t i g e L e s für d e n S a t z J o h n e a t s t h e apple with a knife. KAPITEL 96 8. 8.2. SYNTAXANALYSE 97 PARSING h a u p t keine C h a n c e , f ü r e i n e n e i n z e l n e n S a t z e i n e e i n d e u t i g e L e s art f e s t z u l e g e n . M i t s o l c h e n A m b i g u i t ä t e n m ü s s e n d a n n d i e w e i t e ren K o m p o n e n e n t e n in e i n e m n a t ü r l i c h s p r a c h l i c h e n S y s t e m u m gehen k ö n n e n . 8.2 Parsing In diesem A b s c h n i t t w o l l e n w i r ein P R O L O G - P r o g r a m m ent- wickeln, d a s f ü r die G r a m m a t i k a u s B e i s p i e l 8 . 1 ü b e r p r ü f t , o b ein gegebener S a t z in d e r v o n d e r G r a m m a t i k e r z e u g t e n S p r a c h e e n t halten ist. E i n s o l c h e s P r o g r a m m n e n n t m a n e i n e n P a r s e r . Der Prozess d e r A n a l y s e e i n e E i n g a b e s a t z e s d u r c h d e n P a r s e r heißt John eats t h e apple with the Parsing. worm Zur D a r s t e l l u n g des z u a n a l y s i e r e n d e n S a t z e s w ä h l e n w i r e i n e Liste, die als E l e m e n t e d i e e i n z e l n e n W ö r t e r des S a t z e s e n t h ä l t . Die W ö r t e r w e r d e n durch P R O L O G - A t o m e dargestellt. Unser Parser soll also z . B . f o l g e n d e s V e r h a l t e n z e i g e n : ?- s([john,eats,the,apple]). yes ?- s([john,the,apple,eats]). no John eats t h e apple with the Der P a r s e r soll beweisen, worm o b e i n g e g e b e n e r S a t z in d e r v o n d e r Grammatik e r z e u g t e n S p r a c h e e n t h a l t e n ist. W i e k a n n ein s o l c h e r Beweis a u s s e h e n ? N e h m e n w i r d a z u die P r o d u k t i o n S - + N P D a s E r k e n n e n d e r „ r i c h t i g e n " L e s a r t f ü r e i n e n S a t z ist i n d e r R « | u VP n d formulieren i h r e B e d e u t u n g : g e l e i n s e h r schwieriges P r o b l e m , z u d e s s e n L ö s u n g Informatioff a u f g a n z v e r s c h i e d e n e n E b e n e n r e l e v a n t i s t . O f t g i b t e s syntaK E i n e E i n g a b e k e t t e stellt e i n e K o n s t i t u e n t e S d a r , t i s c h e B e d i n g u n g e n , die g e w i s s e L e s a r t e n a u s s c h l i e ß e n , z . B . dB falls sich diese K e t t e i n zwei T e i l e a u f s p a l t e n l ä ß t S u b k a t e g o r i s i e r u n g v o n V e r b e n . M a n c h e A m b i g u i t ä t l ä ß t sich al und d e r e r s t e Teil e i n e K o n s t i t u e n t e N P d e r semantischen Ebene beseitigen, z . B . durch Restriktionen und d e r z w e i t e T e i l e i n e K o n s t i t u e n t e V P d a r s t e l l t . w d i e A u s w a h l von Füllern für s e m a n t i s c h e Rollen. In u n s e r e m B 3 spiel ließe sich die z w e i t e L e s a r t e r s t d u r c h u n s e r „Weltwisseffl d a ß n ä m l i c h ein W u r m kein I n s t r u m e n t z u m E s s e n e i n e s Ap9 s e i n k a n n , ausschließen. I n v i e l e n F ä l l e n b e s t e h t a b e r a u c h ü b j Analog d a z u k ö n n e n w i r j e d e P r o d u k t i o n d e r G r a m m a t i k i n e i n e entsprechende R e g e l u m f o r m u l i e r e n . KAPITEL 98 8. SYNTAX ANALYSE^ D i e o b i g e F o r m u l i e r u n g der R e g e l h a t d e n V o r t e i l , d a ß sie schon 8.2. PARSING 99 np([john]) g e n a u d i e F o r m e i n e r K l a u s e l h a t . W i r k ö n n e n diese R e g e l u n m i t t e l b a r in P R O L O G a u f s c h r e i b e n : ? ; Dieses M a l ist P R O L O G e r f o l g r e i c h u n d d a h e r e r g i b t sich a l s n ä c h stes B e w e i s z i e l : s(S) :- i append(NP,VP,S), vp([eats,the,apple]) np(NP), vp(VP). Auch d a s k l a p p t w u n d e r b a r , s o d a ß j e t z t d e r g e s a m t e B e w e i s f ü r s([john,eats.the,apple] W i r b e n u t z e n h i e r a p p e n d d a z u , die E i n g a b e k e t t e in zwei Teile zu zerlegen. a b g e s c h l o s s e n ist u n d P R O L O G er- leichtert -g W i e f u n k t i o n i e r t n u n dieses P r ä d i k a t s ( S ) ? N e h m e n w i r ein--; m a l a n , die P r ä d i k a t e n p ( N P ) u n d v p ( V P ) yes w ü r d e n b e r e i t s wie g e w ü n s c h t f u n k t i o n i e r e n . A l s o ist z . B . n p ( N P ) g e n a u d a n n be-. w e i s b a r , w e n n NP e i n e N o m i n a l p h r a s e g e m ä ß u n s e r e r G r a m m a t i k ausgeben k a n n . Nun kann m a n natürlich sämtliche P r o d u k t i o n e n der Gram- $ matik g e n a u n a c h d e m M u s t e r f ü r S —> N P V P i n K l a u s e l n ü b e r - B e t r a c h t e n wir jetzt folgende Anfrage: f setzen. Dies e r g i b t f o l g e n d e s P r o g r a m m : ?- S darstellt. s([john,eats,the,apple]). Der K o p f der Klausel s ( S ) s(S) :- append(NP,VP,S), p a ß t a u f diese A n f r a g e ; d a h e r muß^ np(NP), P R O L O G j e t z t v e r s u c h e n , d e n R u m p f d e r K l a u s e l z u beweisen..". vp(VP). D a d u r c h e r h a l t e n w i r als n ä c h s t e s Beweisziel: append(NP,VP,[john,eat PROLOG VP = findet I s,the,apple]) h i e r f ü r eine e r s t e L ö s u n g mit NP = [] und [ J o h n , e a t s , t h e , a p p l e ] . D a r a u s e r h a l t e n wir als nächstes, II np(G) Eine Nominalphrase leer setzt ja det(DET), n(N). np(NP) nicht sein; die hatten. der kann aber nach Beweisversuch Korrektheit PROLOG der für Prädikate und Grammatik? scheitert, vp [John] eine n e u e u n d VP = d>- vorausg m u ß hier also „ b a c k t r a c k e n " append(NP,VP,[John,eats,the,apple]) c h e n . D i e s f ü h r t z u NP = unserer np([]) np :- append(DET.N.NP), Beweisziel: wir np(NP) und Lösung [eats,the,applg ( w a r u m ? ) . D a m i t e r h a l t e n w i r d a s folgende n e u e B e w e i s z i e l : :- N = NP, n(N). vp(VP) :- append(V,NP,VP), v(V), np(NP). vp(VP) :- V = VP, v(V). KAPITEL 100 8. SYNTAXANALYS. 8.3. ÜBUNGEN E r w e i t e r n Sie die G r a m m a t i k 101 B e i d e n K l a u s e l n f ü r die P r o d u k t i o n e n , d e r e n r e c h t e S e i t e n u r Übung 8.3 N i c h t t e r m i n a l s y m b o l enthält, kann natürlich die Zerlegung m i t t e daß S ä t z e d e r F o r m J o h n e a t s apple o d e r T h e J o h n e a t s t h e a p - a u s Beispiel 8.1 so, ple nicht m e h r e r z e u g t w e r d e n . E r w e i t e r n S i e a u c h d e n P a r s e r a u s append unterbleiben. Abschnitt 8 . 2 e n t s p r e c h e n d u n d t e s t e n S i e d a m i t I h r e G r a m m a t i k . D i e D a x s t e l l u n g des L e x i k o n s in P R O L O G f ü r d i e s e n P a r s ist n a h e l i e g e n d . D a z . B . v ( V ) b e w e i s b a r sein soll, w e n n die Lis V g e n a u ein W o r t e n t h ä l t , d a s ein V e r b ist, k ö n n e n w i r alle V Übung 8.4 ben einfach d u r c h F a k t e n der F o r m v ( [ e a t s ] ) einfache B e h a n d l u n g v o n A d j e k t i v e n . E s s o l l t e n z . B . die S ä t z e in die D a t e n b a s eintragen. % H i e r also u n s e r v o l l s t ä n d i g e s L e x i k o n : 1 E r w e i t e r n Sie die G r a m m a t i k a u s Ü b u n g 8 . 3 u m eine lohn loves t h e beautiful woman u n d Mary lives in a big white house möglich sein. E r w e i t e r n Sie a u c h d e n P a r s e r u n d t e s t e n Sie I h r e Grammatik. n ( [mary] ) . n([john]). Ü b u n g 8 . 5 S c h r e i b e n Sie e i n e n P a r s e r f ü r d i e G r a m m a t i k n ( [woman] ) . Beispiel 8 . 4 . W a s g e h t b e i m P a r s i n g s c h i e f ? n([man]) . n([apple] ) . det ( [the] ) . v( [loves] ) . v([eats]). v([sings] ) . 8.3 Übungen Ü b u n g 8.1 G e b e n Sie alle A b l e i t u n g e n f ü r d e n S a t z T h e loves t h e w o m a n a n , die m i t der G r a m m a t i k m» a u s B e i s p i e l 8. m ö g l i c h sind. Ü b u n g 8.2 G e b e n Sie alle S y n t a x b ä u m e f ü r d e n S a t z J o h n sa*. t h e m a n in t h e park with t h e telescope a n , d i e m i t d e r G r a m m t i k a u s Beispiel 8 . 4 n a c h e n t s p r e c h e n d e r E r w e i t e r u n g des L k o n s m ö g l i c h s i n d . B e s c h r e i b e n Sie, w e l c h e B e d e u t u n g d e s S a t d u r c h j e d e n S y n t a x b a u m w i e d e r g e g e b e n w i r d . S i n d alle d e n k b a B e d e u t u n g e n - sinnvoll o d e r n i c h t - dieses S a t z e s d a m i t erfaß. W e n n nicht, wie m ü ß t e die G r a m m a t i k e r w e i t e r t w e r d e n ? 'Eigennamen werden hier als normale Nomen behandelt. Uns ist klar, dies nicht adäquat ist. In der Übung 8.3 erhalten Sie Gelegenheit, dies be zu machen aus Kapitel 9 Definite Clause Grammars Die s y n t a k t i s c h e A n a l y s e v o n E i n g a b e n ist e i n e s e h r häufig v o r kommende A u f g a b e bei d e r P R O L O G - P r o g r a m m i e r u n g . bietet P R O L O G eine e i n f a c h e M ö g l i c h k e i t , Deshalb Grammatiken und Parser zu s c h r e i b e n . U m e i n e n P a r s e r f ü r e i n e k o n t e x t f r e i e G r a m matik zu p r o g r a m m i e r e n , r e i c h t es a u s , d i e G r a m m a t i k r e g e l n in einer b e s t i m m t e n N o t a t i o n a u f z u s c h r e i b e n u n d d i e s e D a t e i d a n n mit c o n s u l t z u l a d e n . In d e r P R O L O G - L i t e r a t u r h e i ß t diese N o t ation Definite Clause Grammar oder kurz DCG. KAPITEL 104 9. DEFINITE CLAUSE GRAMMARS. B e i s p i e l 9 . 1 Die G r a m m a t i k a u s B e i s p i e l 8 . 1 i m D C G - F o r m a t : | s np np vp vp —> --> --> —> —> np, v p . det, n. n. 105 Diese D a r s t e l l u n g sieht völlig a n d e r s a u s a l s u n s e r P a r s e r i m v o rigen K a p i t e l . W e l c h e Idee s t e c k t h i n t e r d i e s e r K o d i e r u n g ? Die B e d e u t u n g der Klausel s läßt sich folgendermaßen u m schreiben: s(A,B) v, np. V. beginnt und d e r R e s t d e r L i s t e o h n e d i e s e K o n s t i t u e n t e g e r a d e s Lexikon dazu erh n n n n n det V V V —> —> —> —> —> —> —> —> —> [mary] . [john] . [woman] [man] . [apple] [the] . [loves] [eats] . [sings] P R O L O G b e n u t z t die D C G a b e r n i c h t d i r e k t z u m P a r s i n g . S t a t t d e s s e n w e r d e n b e i m L a d e n der D a t e i m i t c o n s u l t d i e Produktion n e n d e r G r a m m a t i k i n „ n o r m a l e " K l a u s e l n ü b e r s e t z t . D a b e i wirc f ü r jede D C G - P r o d u k t i o n g e n a u eine K l a u s e l e r z e u g t . N e h m e n w i r a n , w i r h ä t t e n d i e D a t e i m i t d e r D C G a u s Beispiel 9 . 1 m i t t e l s c o n s u l t erfolgreich g e l a d e n . W i e sieht n u n diel interne Darstellung der Produktionen aus? D a z u schauen wir uns! m i t l i s t i n g e i n m a l die K l a u s e l für s u n d d i e L e x i k o n e i n t r ä g e furj die Verben a n : ?- listing(s). s(A,B) :- np(A,C), vp(C.B). yes ?- listing(v). v([loves|A],A). v([eats|A],A). v([sings|A],A). yes gilt, die Liste A m i t einer K o n s t i t u e n t e v o m T y p s falls B ist. Jede P r o d u k t i o n der D C G wird also in eine Klausel übersetzt, die von d e r L i s t e a n d e r e r s t e n A r g u m e n t s t e l l e a m A n f a n g ein S t ü c k „ a b k n a b b e r t " , d a s g e r a d e eine m ö g l i c h e K o n s t i t u e n t e d e s jeweiligen T y p s i s t u n d d e n R e s t d e r L i s t e a u f d e m z w e i t e n A r g u m e n t übrigläßt. Das Lexikon m u ß demzufolge so kodiert werden, daß genau das Lexem vom Anfang der Liste entfernt wird: ?~ X = n([john,loves,mary],X). [loves,mary] yes Die L e x i k o n e i n t r ä g e e i n e r D C G h a b e n d e s h a l b i m m e r d i e F o r m k a t e g o r i e ( [ l e x e m | R e s t ] , R e s t ] , s o w i e w i r dies a m B e i s p i e l d e r Verbeinträge schon gesehen haben. 106 KAPITEL 9. DEFINITE CLAUSE GRAMMAI 9.1. Z u m b e s s e r e n V e r s t ä n d n i s wollen wir u n s d i e A b a r b e i t u n g des' AUFBAU DER 107 KONSTITUENTENSTRUKTUR die E i n g a b e l i s t e n a c h e i n a n d e r in alle m ö g l i c h e n T e i l l i s t e n z e r l e g e n e i n f a c h e n S a t z e s J o h n loves Mary d u r c h d e n D C G - P a r s e r genau* und d a n n t e s t e n , o b diese Z e r l e g u n g d e r S u b k o n s t i t u e n t e n s t r u k t u r a n s e h e n . D a z u b e t r a c h t e n wir d a s f o l g e n d e , e t w a s der P r o d u k t i o n e n t s p r i c h t . Dieses V e r f a h r e n b e d e u t e t ein b l i n d e s aufbereitete* Ablaufprotokoll von P R O L O G : call ?- || s([john,loves,mary] , []) . s(A call ,B ) ig :- call ,B1) :- n([john,loves,mary] ,B1). n([john|A2] exit ,A2). n ( [ j o h n | [ l o v e s , m a r y ] ] , [1 exit np([john,loves,mary],[loves call vp( [ l o v e s , m a r y ] , [] ) . vp(A3 call ,B3) :- v([loves,mary],B3), v ( [ l o v e s 1 A4] ,A4). exit v( [ l o v e s 1[mary]] , [mary]) call n p ( [ m a r y ] , [] ) . np(A5 call ,B5) n([mary] :- exit n ( [mary | [ ] ] , [ ] ) np([mary] , [] ) exit vp( [ l o v e s , m a r y ] , [] ) exit fang d e r E i n g a b e l i s t e d e n f ü r sie n ö t i g e n T e i l a b z u s c h n e i d e n . D e r Rest, m i t d e m sie n i c h t s a n z u f a n g e n weiß, w i r d e i n f a c h z u r B e a r beitung an nachfolgende K o n s t i t u e n t e n w e i t e r g e g e b e n . Dadurch wird v e r m i e d e n , d a ß die E i n g a b e k e t t e z u n ä c h s t e i n m a l b l i n d z e r legt w e r d e n m u ß ; s t a t t d e s s e n w i r d sie e i n f a c h v o n v o r n e h e r „ a u f g e b r a u c h t " , bis z u m Schluß h o f f e n t l i c h d i e l e e r e L i s t e ü b r i g b l e i b t . D e r N a c h t e i l dieser K o d i e r u n g ist, d a ß z u s ä t z l i c h e V a r i a b l e n in den K l a u s e l n m i t g e s c h l e p p t w e r d e n m ü s s e n . D a d u r c h w i r d d a s P r o g r a m m s c h l e c h t e r l e s b a r u n d s c h w e r e r v e r s t ä n d l i c h . U m diesen N a c h t e i l w i e d e r a u s z u g l e i c h e n , b i e t e t PROLOG die DCG- Notation a n , die es d e m P r o g r a m m i e r e r e r s p a r t , d i r e k t d e n k o m plizierten P R O L O G - C o d e zu s c h r e i b e n . ,B5). n([mary|A6] ,A6) . exit Der D C G - P a r s e r dagegen geht sehr zielgerichtet vor. E r nutzt die T a t s a c h e a u s , d a ß j e d e K o n s t i t u e n t e „ w e i ß " , w i e sie i n t e r n aufgebaut ist. E s w i r d j e d e r K o n s t i t u e n t e ü b e r l a s s e n , sich a m A n - np( [ j o h n , l o v e s . m a r y ] , C ) , np(Al Probieren u n d a n s c h l i e ß e n d e s T e s t e n . s ( [ j ohn, l o v e s , mary] , [ ] ) yes 9.1 Aufbau der Konstituentenstruktur In der R e g e l w e r d e n wir nicht m i t e i n e m P r o g r a m m z u f r i e d e n sein, das n a c h E i n g a b e eines S a t z e s n u r l a p i d a r m i t y e s o d e r no a n t w o r - Vergleicht m a n in d i e s e m P r o t o k o l l die Zeile c a l l f ü r e i n e K o n - , tet. W i r wollen als E r g e b n i s d e r S y n t a x a n a l y s e i r g e n d e i n e D a r s t e l - s t i t u e n t e m i t d e r z u g e h ö r i g e n Zeile e x i t , s o sieht m a n , wie j e d e ! lung des E i n g a b e s a t z e s e r h a l t e n , d i e a l s E i n g a b e s t r u k t u r f ü r eine K l a u s e l g e n a u d a s A n f a n g s s t ü c k v o n d e r E i n g a b e l i s t e e n t f e r n t , da W e i t e r v e r a r b e i t u n g dienen k a n n . J e n a c h A n w e n d u n g k ö n n e n die die z u g e h ö r i g e K o n s t i t u e n t e bildet: Anforderungen a n dieses E r g e b n i s g a n z v e r s c h i e d e n sein. call exit np([j ohn,1oves,mary],A) np([john,loves,mary],[loves,mary]) D e r G r u n d , d a ß D C G s in diese spezielle F o r m ü b e r s e t z t werder» u n d nicht in u n s e r e f r ü h e r e Version m i t a p p e n d , liegt in d e r Effizienz dieses M e c h a n i s m u s . In der a p p e n d - V e r s i o n m u ß P R O L O G ! • Sind w i r a n d e r s y n t a k t i s c h e n A n a l y s e s e l b s t i n t e r e s s i e r t , so k ö n n t e eine R e p r ä s e n t a t i o n d e s S y n t a x b a u m e s s e l b s t ein a n g e m e s s e n e s E r g e b n i s sein. B e i s p i e l e d a f ü r h a b e n w i r b e r e i t s gesehen. • B e i m A u f b a u einer n a t ü r l i c h s p r a c h l i c h e n Schnittstelle für d e n D a t e n b a n k z u g r i f f e r w a r t e n w i r a l s E r g e b n i s ein K o m - 108 KAPITEL 9. DEFINITE CLAUSE GRAMMARS m a n d o , d a s die D a t e n b a n k z u r A u s w a h l d e r g e w ü n s c h t e n D a t e n veranlaßt. W h o works in d e p a r t m e n t 9.1. AUFBAU DER 10: KONSTITUENTENSTRUKTUR B e i s p i e l 9 . 2 D e r S y n t a x b a u m f ü r J o h n e a t s t h e apple a u s B e i spiel 8 . 3 w i r d i n P R O L O G k o d i e r t a l s : 073/62? s( np( SELECT name FRDM p e r s o n n e l - d b WHERE d p t - n o = n(john) '073/62' ), • A l s S e m a n t i k e r sind w i r a n e i n e r Ü b e r s e t z u n g d e s E i n g a b e - vp( s a t z e s in eine p r ä d i k a t e n l o g i s c h e F o r m e l i n t e r e s s i e r t . v(eats), Every man loves a woman np( det(the), V x 3 y loves(x,y) n(apple) ) ) E s g i b t a l s o e i n e V i e l z a h l v e r s c h i e d e n e r , „ s i n n v o l l e r " A u s g a b e n für.] d i e A n a l y s e eines S a t z e s . A u s g e h e n d v o n e i n e r G r a m m a t i k , w i e ] ) w i r sie b i s h e r b e s p r o c h e n h a b e n , ist d i e E r z e u g u n g e i n e s Synta-; x b a u m e s zunächst die naheliegende, d a einfachste, A u f g a b e . W i r J m ü s s e n j a lediglich eine S t r u k t u r a u f b a u e n , d i e e x a k t d i e verwen-^ deten Produktionen der G r a m m a t i k widerspiegelt. Zur E r z e u g u n g ! einer anderen A u s g a b e , z . B . einer s e m a n t i s c h e n Repräsentation,! m u ß wesentlich m e h r Aufwand getrieben werden. Dies wollen wirl Wie k ö n n e n w i r n u n e i n e n s o l c h e n S y n t a x b a u m w ä h r e n d d e s P a r sings a u f b a u e n ? B e t r a c h t e n w i r e i n e P r o d u k t i o n u n s e r e r G r a m matik: S — NP VP Diese P r o d u k t i o n b e s a g t zweierlei: uns aber für das nächste Kapitel aufheben. A l s e r s t e s b e n ö t i g e n w i r eine g e e i g n e t e K o d i e r u n g f ü r e i n e n ! 1. U m eine E i n g a b e k e t t e a l s S a t z a n a l y s i e r e n z u k ö n n e n , m u ß S y n t a x b a u m als P R O L O G - T e r m . E i n e a l l g e m e i n e B a u m s t r u k t u r J d e r e r s t e T e i l d e r K e t t e a l s N P u n d d e r z w e i t e Teil als V P läßt sich folgendermaßen charakterisieren: a n a l y s i e r b a r sein. D i e s e A u s s a g e w u r d e b i s h e r v o n u n s e r e m E i n Baum Parser verwendet. ist 2. D e r S y n t a x b a u m f ü r e i n e K o n s t i t u e n t e v o m T y p S h a t a l s 1. ein B l a t t oder 2 . ein K n o t e n , v o n d e m m i n d e s t e n s e i n e K a n t e a u s g e h t . J e d K a n t e führt wieder zu einem B a u m B e i S y n t a x b ä u m e n sind d i e K n o t e n m i t N i c h t t e r m i n a l s y m b o l m a r k i e r t u n d die B l ä t t e r m i t L e x e m e n . W i r wollen B ä u m e s o k o d i e r e n , d a ß w i r d i e M a r k i e r u n g d K n o t e n als Funktoren von Termen verwenden. D e r T e r m h a t A r g u m e n t e die U n t e r b ä u m e . Die B l ä t t e r sind P R O L Ö G - A t o m e Wurzel einen K n o t e n , d e r m i t S m a r k i e r t ist. A u ß e r d e m h a t e r zwei U n t e r b ä u m e , d e r e n W u r z e l n m i t N P b z w . V P m a r kiert s i n d u n d d i e s e s i n d d i e S y n t a x b ä u m e f ü r d i e K o n s t i t u enten N P bzw. V P . Beim Zugriff a u f d a s L e x i k o n k ö n n e n w i r d e n b e t r e f f e n d e A s t d e s Syntaxbaumes abschließen u n d als B l a t t d a s L e x e m einsetzen. Dieses K o n s t r u k t i o n s v e r f a h r e n f ü r d e n S y n t a x b a u m können ^ r direkt n a c h P R O L O G ü b e r t r a g e n . D e r D C G - F o r m a l i s m u s e r laubt es, die K o n s t i t u e n t e n in e i n e r P r o d u k t i o n m i t z u s ä t z l i c h e n KAPITEL 110 9. DEFINITE CLAUSE GRAMMARS A r g u m e n t e n z u v e r s e h e n . E i n solches A r g u m e n t k ö n n e n w i r be- 9.2. NUR vp(vp(V,NP)) n u t z e n , u m bei j e d e m A b l e i t u n g s s c h r i t t d e n S y n t a x b a u m m i t auf- 111 —> v(V), zubauen. np(NP). D i e P r o d u k t i o n S - > N P V P sieht als D C G - P r o d u k t i o n folgen- vp(vp(V)) —> v(V). dermaßen aus: s(s(NP,VP)) —> np(NP), vp(VP). Diese Regel besagt: D e r S y n t a x b a u m für die K o n s t i t u e n t e S, die m i t d i e ser P r o d u k t i o n g e b i l d e t w e r d e n k a n n , h a t d i e Form s ( N P , V P ) , wobei NP d e r S y n t a x b a u m f ü r d i e K o n s t i t u e n t e N P u n d VP für V P ist. D i e Ü b e r s e t z u n g d e r D C G - P r o d u k t i o n in e i n e K l a u s e l i s t : s(s(NP,VP),A,B) :- np(NP,A,C), D i e z u s ä t z l i c h e n A r g u m e n t e in einer D C G - P r o d u k t i o n w e r d e n also i m m e r a m Anfang der Argumentlisten der PROLOG-Prädikate e i n g e t r a g e n . D a s h a t z . B . b e i m A b l a u f p r o t o k o l l d e n V o r t e i l , daß d i e „ w i c h t i g e n " A r g u m e n t e v o r n e s t e h e n u n d d a h e r b e s s e r erkennb a r sind. I H i e r die g e s a m t e D C G f ü r die G r a m m a t i k a u s B e i s p i e l 8 . 1 mií K o n s t r u k t i o n des S y n t a x b a u m e s : s(s(NP,VP)) n(n(mary)) —> [mary] . n(n(john)) —> [john] . n(n(woman)) —> [woman] n(n(man)) —> [man] . n(n(apple)) —> [apple] det (det ( t h e ) ) —> [the]. v(v(loves)) —> [loves]. v(v(eats)) --> [eats]. v(v(sings)) —> [sings]. Eine A n f r a g e a l s B e i s p i e l : vp(VP,C,B). , KONTEXTFREI? ?X = s ( X , [ J o h n , e a t s , t h e , a p p l e ] , [] ) . s(np(n(john)),vp(v(eats),np(det(the),n(apple)))) yes 9.2 Nur kontextfrei? Eine w i c h t i g e B e m e r k u n g ist a n dieser S t e l l e fällig: D e r DCG- F o r m a l i s m u s ist z u r B e s c h r e i b u n g v o n S p r a c h e n g e e i g n e t , die n i c h t --> mehr d u r c h e i n e k o n t e x t f r e i e G r a m m a t i k b e s c h r i e b e n w e r d e n k ö n - np(NP), nen. D e r F o r m a l i s m u s ist wesentlich m ä c h t i g e r . D i e s liegt d a r a n , vp(VP). daß die z u s ä t z l i c h e n A r g u m e n t e in D C G - P r o d u k t i o n e n n i c h t n u r zur K o n s t r u k t i o n v o n S t r u k t u r e n v e r w e n d e t w e r d e n k ö n n e n , w i e np(np(DET,NP)) —> dies in u n s e r e m B e i s p i e l d e r F a l l w a r . Sie k ö n n e n a u c h z u r F o r m u - det(DET), lierung v o n B e d i n g u n g e n v e r w e n d e t w e r d e n , d i e K o n t e x t a b h ä n g i g - np(NP). keiten a u s d r ü c k e n . np(np(N)) n(N). --> Beispiel 9 . 3 D a s Lieblingsbeispiel d e r I n f o r m a t i k e r f ü r e i n e ein- fache S p r a c h e , die n i c h t m e h r d u r c h eine k o n t e x t f r e i e G r a m m a t i k 112 KAPITEL 9. DEFINITE CLAUSE b e s c h r e i b b a r ist, ist die M e n g e L = {a b c \n n n n 9.3. GRAMMARS > 1 } , d.h. die Sätze j d e r S p r a c h e b e s t e h e n aus einer A n z a h l a , gefolgt v o n d e r g l e i c h e n ' ERWEITERUNGEN ??- a a a b b b c c c , . . . , a b e r nicht: a a b c o d e r a a a b b c c c . no E i n e D C G f ü r diese S p r a c h e läßt sich leicht a n g e b e n : s(Anzahl) s([a,a,b,b,c,c],[]). yes A n z a h l b , gefolgt v o n d e r gleichen A n z a h l c ; a l s o : a b c , a a b b c c , ] | 113 s([a,a,a,b,b,c,c,c] , []) . J 9.3 —> Erweiterungen ap(Anzahl), B i s h e r h a t t e n alle Teile d e r D C G - P r o d u k t i o n e n d i r e k t m i t der bp(Anzahl), % cp(Anzahl). 1 Verarbeitung der Eingabe zu tun. M a n c h m a l m ö c h t e m a n jedoch I die Möglichkeit h a b e n , z u s ä t z l i c h i r g e n d w e l c h e T e s t s o d e r A k t i o - ap(l) —> a(l). f ap(Anzahl+l) —> nen a u s z u f ü h r e n , die nicht d i r e k t z u d e n P r o d u k t i o n e n d e r G r a m matik gehören. P R O L O G bietet die Möglichkeit, in geschweiften K l a m m e r n { } beliebige P R O L O G - A u s d r ü c k e i n D C G - P r o d u k t i o - a(l), nen e i n z u f ü g e n . Diese w e r d e n v o m D C G - U b e r s e t z e r d a n n e i n f a c h ap(Anzahl). u n v e r ä n d e r t in die P R O L O G - K l a u s e l ü b e r n o m m e n . E i n Beispiel für die A n w e n d u n g d i e s e r E r w e i t e r u n g b i e t e t die bp(l) D a r s t e l l u n g des L e x i k o n s in u n s e r e r B e i s p i e l g r a m m a t i k . E s ist s e h r —> aufwendig, wie b i s h e r f ü r j e d e n L e x i k o n e i n t r a g e i n e G r a m m a t i k r e - b(l). bp(Anzahl+l) —-> als eine M e n g e n v o n P a a r e n ( L e x e m , K a t e g o r i e ) d a r s t e l l e n k ö n n e n : b(l), bp(Anzahl). cp(l) lex(mary,n). lex(john,n). --> lex(woman,n). c(l). cp(Anzahl+l) —> c(l), cp(Anzahl). ~ > Ca]. b(l) —> [b]. c(l) --> [c]. a(l) gel zu f o r m u l i e r e n . S t a t t d e s s e n m ö c h t e m a n d a s L e x i k o n e i n f a c h D i e P r o d u k t i o n e n f ü r a p , bp u n d c p e r l a u b e n b e l i e b i g v i e l e a, b l lex(man,n). lex(apple,n). lex(the.det). lex(loves,v). lex(eats.v). lex(sings,v). F ü r j e d e lexikalische K a t e g o r i e b e n ö t i g e n w i r d a n n n u r n o c h eine DCG-Produktion: bzw. c. D a s zusätzliche Argument wird dazu benutzt, eine S t n i k j j t u r a u f z u b a u e n , die die A n z a h l r e p r ä s e n t i e r t . D i e k r i t i s c h e Proa n(n(N)) d u k t i o n ist die f ü r s , w o ü b e r das z u s ä t z l i c h e A r g u m e n t g e f o r d e [I], w i r d , d a ß die A n z a h l d e r a , b u n d c ü b e r e i n s t i m m t . { --> lex(N.n) }. 114 KAPITEL 9. DEFINITE CLAUSE 9.4. GRAMMA 115 ÜBUNGEN J o h n sleeps. D e r D C G - Ü b e r s e t z e r b a u t d a r a u s die K l a u s e l : * J o h n sleeps t h e apple. n(n(N),[H|A],A) * Mary likes. :- Mary likes J o h n . lex(N,n). J o h n sings. D i e s e K l a u s e l e n t s t e h t d a d u r c h , d a ß d e r D C G - Ü b e r s e t z e r den e r * J o h n sings a song. s t e n Teil d e r P r o d u k t i o n wie g e w o h n t u m f o r m t u n d d e n Teil in g e s c h w e i f t e n K l a m m e m u n v e r ä n d e r t in d e n R u m p f d e r Klausel übernimmt. & A u f diese W e i s e h a b e n wir eine s e h r e l e g a n t e u n d e i n f a c h e ! F o r m u l i e r u n g d e r G r a m m a t i k u n d a u ß e r d e m e i n e einheitliche xikonzugriffsfunktion Le\ durch l e x . D i e s e r M e c h a n i s m u s ist b e s o n d e r s w e r t v o l l , d a m a n s o sehr e i n f a c h die R e a l i s i e r u n g des L e x i k o n s v e r ä n d e r n k a n n , o h n e daß G r a m m a t i k r e g e l n d a v o n b e t r o f f e n sind. M a n m u ß lediglich die. S c h n i t t s t e l l e z u m L e x i k o n l e x a n p a s s e n . B e i s p i e l s w e i s e könnten^ w i r s o e i n e M o r p h o l o g i e k o m p o n e n t e e i n b a u e n , d i e n i c h t unmittelb a r in einem Lexikon nachschaut, s o n d e r n zuerst eine m o r p h o j l o g i s c h e A n a l y s e des W o r t e s d u r c h f ü h r t u n d d a n n a n s t e l l e einesj V o l l f o r m e n l e x i k o n s ein sehr viel k o m p a k t e r e s Stammformenlexi-j kon benutzt. Ü b e r h a u p t ist es ein g u t e r P r o g r a m m i e r s t i l , m ö g l i c h s t wenige" i m p l i z i t e A b h ä n g i g k e i t e n in d e n P r o g r a m m e n z u k o d i e r e n . S t a t t d e s s e n s o l l t e n g e e i g n e t e S c h n i t t s t e l l e n d e f i n i e r t w e r d e n , die un abhängig v o n den internen Strukturen der P r ä d i k a t e sind. 9.4 Übungen Ü b u n g 9.1 E r w e i t e r n Sie die D C G a u s B e i s p i e l 9 . 1 d u r c h ein z u s ä t z l i c h e s A r g u m e n t , m i t d e m die Ü b e r e i n s t i m m u n g v o n Pers o n u n d N u m e r u s a n den e n t s p r e c h e n d e n S t e l l e n g e s i c h e r t wird. S ä t z e wie J o h n eats an apples o d e r J o h n e a t t h e apple sollen als u n g r a m m a t i k a l i s c h erkannt werden. Ü b u n g 9.2 F ü h r e n Sie V e r b e n m i t v e r s c h i e d e n e n s i e r u n g e n ein. B e t r a c h t e n Sie d a z u f o l g e n d e S ä t z e : Subkategori- i Übung 9.3 Die Sprache L = {aca\a € { a , & } * } , d . h . die S ä t z e d e r Sprache s i n d e i n e beliebige F o l g e v o n a u n d b , g e f o l g t v o n e i n e m c, gefolgt v o n d e r i d e n t i s c h e n F o l g e v o n a u n d b , ist e b e n f a l l s n i c h t durch e i n e k o n t e x t f r e i e G r a m m a t i k b e s c h r e i b b a r . G e b e n Sie eine DCG a n , d i e g e n a u diese S p r a c h e e r z e u g t . Kapitel 10 Deutsch statt P R O L O G Immer m e h r I n f o r m a t i o n w i r d h e u t z u t a g e in C o m p u t e r n g e s p e i chert. U m a u f diese I n f o r m a t i o n schnell u n d z u v e r l ä s s i g w i e d e r zugreifen z u k ö n n e n , w i r d sie in A u s d r ü c k e n f o r m a l e r Sprachen abgelegt u n d nicht in n a t ü r l i c h e r S p r a c h e . N a t ü r l i c h e Sprachen scheinen z u r k o m p a k t e n u n d leicht v e r f ü g b a r e n I n f o r m a t i o n s d a r stellung i m C o m p u t e r n i c h t g e e i g n e t , weil sie „ m a t h e m a t i s c h " u n erwünschte E i g e n s c h a f t e n wie z u m Beispiel M e h r d e u t i g k e i t b e s i t zen. D e r B e z u g z w i s c h e n A u s d r ü c k e n n a t ü r l i c h e r S p r a c h e u n d d e n durch sie b e s c h r i e b e n e n O b j e k t e n ist n i c h t i m m e r e i n d e u t i g : Emilie g a b J o h a n n a eine Schallplatte. Sie In d i e s e m Beispiel ist z u m Z e i t p u n k t des S c h r e i b e n s o d e r S p r e chens des W o r t e s sie n i c h t k l a r , w o r a u f es sich b e z i e h t . T r o t z d e r a r t i g e r P r o b l e m e w ä r e es p r a k t i s c h , w e n n m a n , z u mindest in e i n g e s c h r ä n k t e r A r t u n d W e i s e , i n n a t ü r l i c h e r S p r a c h e mit d e m C o m p u t e r k o m m u n i z i e r e n k ö n n t e . D a z u m u ß n a t ü r l i c h e Sprache ( z u m B e i s p i e l D e u t s c h ) in die g e w ä h l t e f o r m a l e Spra- che ü b e r s e t z t w e r d e n u n d z u r ü c k ü b e r s e t z t w e r d e n . D e r W e g v o n 118 KAPITEL 10. DEUTSCH STATT PROLOG n a t ü r l i c h s p r a c h l i c h e n A u s d r ü c k e n z u f o r m a l e n A u s d r ü c k e n heißt Sprachanalyse. 10.1. 119 SPRACHANALYSE 10.1 Sprachanalyse D i e S p r a c h a n a l y s e läßt sich w i e d e r u m in (mindeAnalyw In den e i n e n A u f g a b e n b e r e i c h d e r S p r a c h a n a l y s e , die s y n t a k t i s c h e Semdn-, Analyse, h a b e n w i r a n h a n d d e r D e f i n i t e C l a u s e G r a m m a r s s c h o n |j| etwas E i n b l i c k b e k o m m e n . J e t z t soll d e r z w e i t e Teil h i n z u g e f ü g t D e r B e g r i f f „ s e m a n t i s c h e R e p r ä s e n t a t i o n " s t a m m t d a h e r , daß werden, d e r A u f b a u einer s e m a n t i s c h e n R e p r ä s e n t a t i o n , in u n s e - s t e n s ) zwei A u f g a b e n t e i l e aufgliedern: die s y n t a k t i s c h e und den Aufbau semantischer Repräsentationen, tikkonstruktion auch genannt. i n d e r g e w ä h l t e n f o r m a l e n S p r a c h e ( z . B . P R O L O G ) die „Bedeu- rem Fall v o n P R O L O G - A u s d r ü c k e n . t u n g e n " , d.h. die „ S e m a n t i k " der S ä t z e d a r g e s t e l l t w e r d e n sollen. Ein erster A n s a t z wäre, den d e u t s c h e n S a t z W o r t für W o r t D i e R ü c k ü b e r s e t z u n g f o r m a l s p r a c h l i c h e r A u s d r ü c k e in natürliche nach P R O L O G zu ü b e r s e t z e n . Dies e r w e i s t s i c h d o c h s e h r s c h n e l l S p r a c h e heißt Sprachgenerierung. als u n g e s c h i c k t . W i r h a b e n b e r e i t s g e s e h e n , wie d i e Beide Übersetzungsrichtungen sind im G r u n d e g e n o m m e n Abbildungen zwischen Ausdrücken „syntakti- sche S t r u k t u r " , d e r „ S y n t a x b a u m " , e i n e s S a t z e s a u f g e b a u t w e r d e n der zu betrachtenden natürlichen Sprache und Ausdrücken der kann. D i e S t r u k t u r des S y n t a x b a u m s e n t s p r i c h t d e r V e r s c h a c h - gewählten formalen der telung d e r A u f r u f e b e i m A n a l y s e v o r g a n g . Sprache. Die Sprachanalyse setzt auf Eine Wort-für-Wort- n a t ü r l i c h e n S p r a c h e als Q u e l l s p r a c h e a u f u n d e r z e u g t A u s d r ü d « * Übersetzung w ü r d e a u f der I n f o r m a t i o n ü b e r d i e R e i h e n f o l g e d e r d e r f o r m a l e n S p r a c h e als Z i e l s p r a c h e . D i e Q u e l l s p r a c h e für dii Wörter im S a t z basieren. D a wir a b e r d u r c h die S p r a c h g e n e r i e r u n g ist die b e t r e f f e n d e f o r m a l e S p r a c h e , ihre Zii sozusagen k o s t e n l o s I n f o r m a t i o n ü b e r d i e s y n t a k t i s c h e s p r ä c h e ist die e n t s p r e c h e n d e n a t ü r l i c h e S p r a c h e . ( K o n s t i t u e n t e n s t r u k t u r ) eines S a t z e s z u r V e r f ü g u n g könnten w i r n u n v e r s u c h e n , u n s e r e Syntaxanalyse Struktur bekommen, Übersetzungsvorschrift auf dem S y n t a x b a u m b z w . k o r r e s p o n d i e r e n d z u d e n S y n t a x r e g e l n z u Deutsche Ausdrücke formulieren. D i e eigentliche S y n t a x a n a l y s e d i e n t d a n n n i c h t m e h r Analyse allein z u m T e s t e n d e r G r a m m a t i k a l i t ä t v o n S ä t z e n , s o n d e r n lie- Generierung fert gleichzeitig d a s G r u n d g e r ü s t , e n t l a n g d e m d i e T semantische R e p r ä s e n t a t i o n des S a t z e s a u f g e b a u t w i r d . PROLOG-Wissensbasis W i r gehen dabei davon aus, daß i m L e x i k o n jedes Wort m i t e i n e r partiellen semantischen Repräsentation einzelne versehen Z u r D e m o n s t r a t i o n d e r V o r g e h e n s w e i s e bei A n a l y s e u n d G e n e n g a ist. „ P a r t i e l l " d e s w e g e n , weil diese R e p r ä s e n t a t i o n e n a u f lexikali- r u n g w ä h l e n w i r die drei folgenden B e i s p i e l s ä t z e : scher E b e n e n o c h keine a k z e p t a b l e n F o r m e l n d e r f o r m a l e n Zielsprache sind, s o n d e r n n u r Teile s o l c h e r F o r m e l n o d e r m i t P l a t z - 1. Alle Menschen sind sterblich. haltern v e r s e h e n e S c h e m a t a f ü r s o l c h e F o r m e l n d a r s t e l l e n . 2 . Sokrates ist ein Mensch. Aufbauend auf den partiellen s e m a n t i s c h e n S t r u k t u r e n im Lexikon m ü s s e n w i r d a n n j e d e r S y n t a x r e g e l i n F o r m e i n e r 3 . S o k r a t e s ist sterblich. 'truktionsregel D i e Ü b e r s e t z u n g e n d i e s e r A u s d r ü c k e n a c h P R O L O G sollen laute :- R e p r ä s e n t a t i o n e n d e r in d e r e n t s p r e c h e n d e n S y n t a x r e g e l e r w ä h n ten K o n s t i t u e n t e n mensch(X).• Kon- die I n f o r m a t i o n m i t g e b e n , w i e a u s d e n p a r t i e l l e n auf der rechten R e g e l s e i t e , die semantische 1. sterblich(X) 2. mensch(sokrates). s a m m e n g e b a u t w i r d . D a s heißt, die S y n t a x r e g e l n w e r d e n u m die 3. sterblich(sokrates). semantischen K o n s t r u k t i o n s r e g e l n augmentiert. R e p r ä s e n t a t i o n f ü r die K o n s t i t u e n t e M der linken Regelseite zu- D e n A u f b a u se- 120 KAPITEL 10. DEUTSCH STATT PROLOG mantischer Repräsentationen entlang der syntaktischen n e n n t m a n kompositioneilen Regeln Auflau. F ü r die W a h l d e r g e e i g n e t e n p a r t i e l l e n s e m a n t i s c h e n R e p r ä s e n t a t i o n e n f ü r b e s t i m m t e W ö r t e r u n d W o r t k l a s s e n u n d f ü r d i e Ref. g e l n ü b e r d e n Z u s a m m e n b a u v o n F o r m e l t e i l e n g i b t es k e i n e v e r ? bindlichen Richtlinien, jedoch Erfahrungswerte und Traditionen? 10.1. 121 SPRACHANALYSE Beispiel 1 0 . 1 Eigennamen Deutsch PROLOG Sokrates sokrates Nomina D a s V o r g e h e n ist i m edlgemeinen in d e r A r t , d a ß m a n s i c h überlegt, Ein N o m e n b e d e u t e t i m a l l g e m e i n e n e i n e K l a s s e v o n w i e sinnvollerweise die R e p r ä s e n t a t i o n f ü r e i n e n k o m p l e t t e n Satz und läßt sich d e s w e g e n als (einstelliges) P r ä d i k a t a u s s e h e n soll u n d welche I n f o r m a t i o n e i n z e l n e K o n s t i t u e n t e n m a l x i m a l „von sich a u s " mitbringen können. W e n n die S a t z r e p ä s e n t a J Beispiel 1 0 . 2 Objekten übersetzen. Nomina t i o n d a n n m e h r I n f o r m a t i o n e n zu e n t h a l t e n h ä t t e , als d u r c h eineff Deutsch PROLOG k o m p o s i t i o n e i l e n Z u s a m m e n b a u d e r T e i l r e p r ä s e n t a t i o n e n möglicHf Mensch mensch(X) ist, m u ß m a n sich e v e n t u e l l m i t einer s c h w ä c h e r e n D a r s t e l l u n g für^ d e n . G e s a m t s a t z zufrieden g e b e n , o d e r d o c h n o c h v e r s u c h e n , die l e x i k a l i s c h e n T e i l r e p r ä s e n t a t i o n e n „ s c h l a u e r " z u m a c h e n o d e r die K o n s t r u k t i o n s r e g e l n z u v e r b e s s e r n . D a b e i sollte i m m e r als Leifc linie g e l t e n : Die Nominalphrasen Die W ö r t e r alle, j e d e u n d g e n e r i s c h v e r w e n d e t e u n b e s t i m m t e A r t i kel w e r d e n in A l i q u a n t e r e n ü b e r s e t z t , d a i n D a t e n b a s i s - E i n t r ä g e n alle V a r i a b l e n i m p l i z i t allquantifiziert s i n d , h e i ß t d a s e i n f a c h , d a ß Konstruktionsregeln sentation sollten und der lexikalischen so allgemein 10.1.1 Allquantifizierte für bezüglich die der semantische Reprä- syntaktischen Regeln Wortklassen wie möglich konzipiert so systematisch und werden. alle, jede e t c . in V a r i a b l e n ü b e r s e t z t w e r d e n . Beispiel 1 0 . 3 Allquantifizierung Deutsch PROLOG alle Menschen mensch(X) Allquantifizierende A u s d r ü c k e m a c h e n e i g e n t l i c h n u r S i n n , w e n n Übersetzungskonventionen noch ein w e i t e r e s P r ä d i k a t dabei s t e h t , w i e z u m B e i s p i e l in d e m B e v o r wir z u r B e a r b e i t u n g o b e n g e n a n n t e r B e i s p i e l s ä t z e g e l a n g e sollen als kleiner E x k u r s einige Hinweise f ü r d i e Z u o r d n u n g p a r t w eller s e m a n t i s c h e r R e p r ä s e n t a t i o n e n zu W o r t k l a s s e n g e g e b e n wer-; d e n ( s i e h e [ B o n e v a c 1 9 8 7 ] ) . M a n soll j e d o c h nicht ü b e r s e h e n , dafi^ Satz Alle Menschen sind sterblich. D i e U b e r s e t z u n g dieses Sat- zes wird k l a r e r , w e n n m a n ihn u m f o r m u l i e r t i n W e n n j e m a n d ein Mensch ist, dann ist er sterblich. Beispiel 1 0 . 4 Allquantifizierung mit Modifikation j e d e dieser E m p f e h l u n g e n bei d e r V e r w e n d u n g z u r B e s c h r e i b « Deutsch PROLOG eines nichttrivialen Sprachfragments sofort P r o b l e m e verursach^ alle Menschen sind sterblich sterblich(X) :-mensch(X) die Gegenstand der Semantikforschung sind. Existentiell quantifizierte Nominalphrasen Existentiell q u a n t i f i z i e r t e N o m i n a l p h r a s e n i n A u s s a g e s ä t z e n w e r - Eigennamen den schlichtweg i n ein P r ä d i k a t m i t e i n e r K o n s t a n t e n a l s A r g u E i g e n n a m e n l a s s e n sich i n I n d i v i d u e n k o n s t a n t e n , P R O L O G - K o n s t a n t e n übersetzen. d a s heißt J ment ü b e r s e t z t . D a s heißt, die E x i s t e n z d e s b e t r e f f e n d e n O b j e k t e s *ird postuliert. 122 KAPITEL Beispiel 10.5 10. DEUTSCH STATT PROLOG" Existenzqv.antifizierv.ng PROLOG E s gibt einen Menschen. mensch(789423789) . : 123 HLLFSMITTEL Präpositionalphrasen \ Deutsch 10.2. ? P r ä p o s i t i o n a l p h r a s e n b e s i t z e n die gleiche D a r s t e l l u n g w i e P r ä p o sitionen m i t d e m U n t e r s c h i e d , d a ß b e r e i t s e i n e s d e r b e i d e n d u r c h die P r ä p o s i t i o n in B e z u g g e s e t z t e n O b j e k t e n ä h e r b e s c h r i e b e n ist: E x i s t e n t i e l l q u a n t i f i z i e r t e N o m i n a l p h r a s e n i n F r a g e s ä t z e n werden Beispiel 1 0 . 1 0 in V a r i a b l e n (in Z i e l k l a u s e l n ) ü b e r s e t z t . Beispiel 10.6 Existenzquantifizierung in Deutsch PROLOG Gibt es einen M e n s c h e n ? ?- Fmgen mensch(X) . Adjektive ,1 -f? Beispiel 10.7 Deutsch PROLOG X auf der Straße auf(X,Y) ,Strasse(Y) Ein, v o n einer P r ä p o s i t i o n a l p h r a s e m o d i f i z i e r t e s N o m e n b e k o m m t dann folgende D a r s t e l l u n g : Beispiel 1 0 . 1 1 A d j e k t i v e k ö n n e n in vielen F ä l l e n als e i n s t e l l i g e P r ä d i k a t e übersetzt werden: Präpitionalphrasen 3. Nomen mit PP Deutsch PROLOG Kind auf der S t r a ß e auf (X,Y) ,kind(X) ,strasse(Y) tj Adjektive Verben Deutsch PROLOG W sterblicher S o k r a t e s sterblich(sokrates) . T* Verben w e r d e n in P r ä d i k a t e ü b e r s e t z t . D i e s y n t a k t i s c h e V a l e n z ergibt i m a l l g e m e i n e n die Steifigkeit d e s P r ä d i k a t s . Beispiel 1 0 . 1 2 D a s s e l b e gilt f ü r R e l a t i v s ä t z e , d u r c h d i e e b e n f a l l s E i g e n s c h a f t e n ^ b e s t i m m t e r O b j e k t e u n d I n d i v i d u e n n ä h e r spezifiert w e r d e n : Beispiel 1 0 . 8 Jlt Deutsch PROLOG Johann schläft. schlafen(Johann) Peter ißt Apfelmus, essen(peter.apfelmus) äf Relativsätze Deutsch PROLOG Sokrates, der sterblich ist sterblich (sokrates) & Ver&en 10.2 Hilfsmittel ^ach d i e s e m E x k u r s wollen w i r w i e d e r z u d e n d r e i B e i s p i e l s ä t z e n Präpositionen j| P r ä p o s i t i o n e n stellen i m a l l g e m e i n e n zweistellige P r ä d i k a t e da also R e l a t i o n e n , d.h. B e z i e h u n g e n z w i s c h e n zwei O b j e k t e n : -."¡1 zurückkehren u n d z u e r s t e i n m a l f e s t h a l t e n , d u r c h w e l c h e A r t e n v o n A u s d r ü c k e n sie r e p r ä s e n t i e r t w e r d e n s o l l e n . D i e a e . ig und sterblich(sokrates) sind Ausdrücke einstellige Terme, s t e r b l i c h ( X ) : - m e n s c h ( X ) ist e i n e K l a u s e l , d e r e n R u m p f Q B e i s p i e l 1 0 . 9 Präpositionen nsch(sokrates) ur ein P r ä d i k a t e n t h ä l t . Das e r s t e P r o b l e m b e i m A u f b a u v o n PROLOG-Ausdrücken Deutsch PROLOG | mittels P R O L O G ist, d a ß die F u n k t o r e n v o n T e r m e n u n d P r ä d i - XaufY auf(X.Y) J katsnamen i m m e r i n s t a n t i i e r t sein m ü s s e n , v a r i a b l e Funktoren KAPITEL 124 10. DEUTSCH STATT PROLOGA 10.2. HILFSMITTEL u n d P r ä d i k a t s n a m e n sind ausgeschlossen. W ä h r e n d des A u f b a u s t '/, e i n e s A u s d r u c k s k a n n es j e d o c h s e h r w o h l v o r k o m m e n , d a ß z w a r , artikell —> [alle] . artikel2 —> [ein]. b e k a n n t ist, d a ß a n e i n e r b e s t i m m t e n S t e l l e e i n F u n k t o r stehen! m u ß , a b e r dessen Instantiierung noch nicht bekannt ist. F u n k t c ^ J r e n m ü s s e n also, zumindest vorübergehend auf ArgumentsteUeat v o n T e r m e n s t e h e n , d e n n d o r t sind V a r i a b l e n e r l a u b t . W i r w ä h l e n ; f ü r e i n s t e l l i g e T e r m e b z w . f ü r einstellige P r ä d i k a t e die N o t a t i o n term(Funktor.Argument). Die zweite Schwierigkeit ist, daß Ubersetzungen für ganze ^ Sätze unterschiedlichen S c h e m a t a anzugehören scheinen. Einmal; 125 Lexikon eigenname —> [sokrates]. nomen — > [menschen]. nomen — > [mensch] . - kopula —> [ist] . kopula —> [sind] . adjektiv —> [sterblich] . 10.2.2 Augmentierung des Lexikons w i r d ein S a t z a l s e i n e K l a u s e l ü b e r s e t z t : a ( X ) : - b ( X ) , e i n m a l a l s | Fakt c ( Y ) . Homogenität würde jedoch den Ubersetzungsprozeß! e r l e i c h t e r n . D i e s e s D i l e m m a löst sich v o n s e l b s t , w e n n m a n d i e inS t e r n e S t r u k t u r von Fakten ansieht: Fakten sind degenerierte K l a u | sein der F o r m : c ( Y ) : - t r u e . D a m i t l a u t e n d a n n die Beispiele inj u n s e r e r Schreibweise von P R O L O G - A u s d r ü c k e n so: 1. t e r m ( s t e r b l i c h , X ) :- term(mensch(X)) 2. term(mensch,sokrates):-true 3. term(sterblich,sokrates):-true 10.2.1 Die DCG für die Syntaxanalyse D i e S e m a n t i k k o n s t r u k t i o n b r a u c h t die S y n t a x a n a l y s e a l s R a h m e n ^ D i e s e r soll a u s f o l g e n d e r D C G b e s t e h e n , d i e w i r d a n n sukzessive^ u m die Semantikkonstruktion '/, s np, mantikkonstruktion ermöglichen. J e d e m L e x i k o n e i n t r a g wird eine partielle s e m a n t i s c h e R e p r ä s e n t a t i o n z u g e o r d n e t . D i e P a r t i a l i t ä t wird d a d u r c h a u s g e d r ü c k t , d a ß die A u s d r ü c k e a n b e s t i m m t e n S t e l len V a r i a b l e n als P l a t z h a l t e r f ü r s p ä t e r n o c h z u z u f ü g e n d e I n f o r mation e n t h a l t e n . • F ü r folgende W ö r t e r ist d i e z u g e o r d n e t e S t r u k t u r l e e r : ein, ist, sind. • Mensch u n d sterblich w e r d e n m i t e i n s t e l l i g e n T e r m e n v e r s e hen. erweitern. • Die U b e r s e t z u n g Syntaxregeln —> W i r b e g i n n e n b e i m L e x i k o n m i t d e n E r w e i t e r u n g e n , die die S e - des W ö r t c h e n s alle b e s a g t , d a ß die gumente von K o p f und R u m p f der zu erstellenden vp. Ar- Klausel gleich sein sollen, w a s ü b e r d i e s e A r g u m e n t e p r ä d i z i e r t w i r d , bleibt n o c h offen. np — > eigenname. np — > artikell, nomen. np — > artikel2, nomen. vp — > kopula, praedikatsnomen. praedikatsnomen —> adjektiv. praedikatsnomen —> np. • Der E i g e n n a m e n Sokrates b e k o m m t i m P r i n z i p die gleiche U b e r s e t z u n g w i e alle, n u r m i t d e m Unterschied, daß der R u m p f der K l a u s e l sofort m i t d e r t r i v i a l e n K l a u s e l t r u e instantiiert wird. * e n wir dies n o c h e i n m a l in e i n e r T a b e l l e z u s a m m e n : 126 KAPITEL 10. DEUTSCH STATT Wort PROLOG-Darstellung alle term(_,X) sokrates term(_,sokrates) mensch tenn(mensch,_) menschen term(mensch,_) sterblich term(sterblich,_) PROLOG} 10.2. '/, :-term(_,X) Konstruktionsregeln konstruiere_s(NPStruktur,VPStruktur,SStruktur) : - :-true NPStruktur = SStruktur = (VPStruktur:-_), NPStruktur. konstruiere_np(Artstruktur,NStruktur,NPStruktur) : Artstruktur = NPStruktur = 10.2.3 127 HILFSMITTEL Konstruktionsregeln «. 10.2.4 (_:-NStruktur), Artstruktur. Die augmentierte Grammatik S o wie die L e x i k o n e i n t r ä g e u m p a r t i e l l e s e m a n t i s c h e S t r u k t u r e n ! Zusammen mit den eben erwähnten K o n s t r u k t i o n s r e g e l n erhal- a u g m e n t i e r t w o r d e n sind, m ü s s e n z u d e n S y n t a x r e g e l n d i e V o r ? ten wir n u n eine f u n k t i o n s f ä h i g e G r a m m a t i k , d i e b e i m S c h r i f t e n über das Zusammenbauen von PROLOG-Ausdrücken! h i n z u g e f ü g t w e r d e n . Als e r s t e s w i r d j e d e s N i c h t t e r m i n a l d e r DCG^s d e m eine n i c h t t r i v i a l e Ü b e r s e t z u n g z u g e o r d n e t w e r d e n soll, m i t j e i n e r V a r i a b l e n als P l a t z h a l t e r für die z u e r s t e l l e n d e S t r u k t u r ver-| '/, Syntaxregeln s (SStruktur) --> s e h e n . U n t e r d e n eigentlichen K o n s t r u k t i o n s r e g e l n g i b t es in m v | np(NPStruktur), s e r e m einfachen Beispiel zwei T y p e n : vp(VPStruktur), m Parsing P R O L O G - A u s d r ü c k e in u n s e r e r e i g e n e n N o t a t i o n a u f b a u t . {konstruiere_s(NPStrukur,VPStruktur,SStruktur) } . 1 . Die S t r u k t u r w i r d u n v e r ä n d e r t v o n e i n e r K o n s t i t u e n t e n d e r , r e c h t e n S e i t e einer S y n t a x r e g e l a n d i e K o n s t i t u e n t e a u f der? linken R e g e l s e i t e „ w e i t e r g e r e i c h t " . J 2 . Zwei Ü b e r s e t z u n g e n v o n K o n s t i t u e n t e n d e r r e c h t e n R e g e l ^ seite w e r d e n m i t e i n a n d e r z u r Ü b e r s e t z u n g d e r linken Regel-J seite v e r k n ü p f t . || np ( S t r u k t u r ) —> np ( N P S t r u k t u r ) eigenname(Struktur). --> artikell(ArtStruktur), nomen(NStruktur), {konstruiere_np (Artstruktur, NStruktur .NPStruktur) } . np ( S t r u k t u r ) —> artikel2, nomen(Struktur). D a s simple W e i t e r r e i c h e n v o n S t r u k t u r e n w i r d e r r e i c h t durch d i e V e r w e n d u n g desselben V a r i a b l e n n a m e n s links u n d r e c h t s des Regelpfeils. F ü r die V e r k n ü p f u n g z w e i e r S t r u k t u r e n g i b t es wie^i d e r u m zwei F ä l l e . Die Ü b e r s e t z u n g a l l q u a n t i f i z i e r t e r Nominal-g p h r a s e n w i r d e r z e u g t d u r c h Unifikation d e r Ü b e r s e t z u n g des N d ^ m e n s m i t d e m R u m p f d e r Ü b e r s e t z u n g d e s A r t i k e l s alle. D i e , e i j E n e m ganzen Satz entsprechende Klausel entsteht, wenn m a n den| K o p f der Übersetzung der Nominalphrase m i t der Übersetzung! d e r V e r b a l p h r a s e unifiziert. E s w e r d e n a l s o d i e b e i d e n f o l g e n d e n P r ä d i k a t e b e n ö t i g t , m i t jeweils drei A r g u m e n t e n : vp ( S t r u k t u r ) —> kopula, praedikatsnomen(Struktur). praedikatsnomen(Struktur) —> adjektiv(Struktur). Praedikatsnomen(Struktur) np(Struktur). —> KAPITEL 128 '/, 10. DEUTSCH STATT PROLOG Lexikon artikell((term(_,X):-term(_,X))) axtikel2 —> --> [alle]. —> nomen(tenn(mensch,_)) —> [menschen]. nomen(term(mensch,_)) —> [mensch]. —> [ist]. —> [sind]. 10.3 Generierung [sokrates] . a r b e i t e t e D C G läßt s.ich prinzipiell a u c h als G e n e r a t o r —> läßt u n d s t a t t d e s s e n die V a r i a b l e f ü r die d e m S a t z e n t s p r e c h e n d e Struktur instantiiert: s(Satz,[],(term(sterblich.X):-term(mensch(X)))) Satz [sterblich]. = Satz = Satz Beispiellauf der Grammatik = Satz = S t a t t d e s r e l a t i v u n ü b e r s i c h t l i c h e n A b l a u f p r o t o k o l l s ( t r a c e ) wird h i e r d e r , e i g e n t l i c h n u r implizit v o r h a n d e n e S y n t a x b a u m darge- s t e l l t . J e d e r K n o t e n ist m i t d e m , „bis d o r t h i n " a u f g e b a u t e n A u s druck annotiert. Aus Platzgründen wird hier das P r ä d i k a t mit t term abgekürzt. [alle,menschen,sind,sterblich]; [alle,mensch,ist,sterblich]; [alle,mensch,sind,sterblich]; no Dieser B e i s p i e l a u f r u f zeigt sofort eines d e r P r o b l e m e d e r G e n e r i e rung auf: Die s e m a n t i s c h e S t r u k t u r e n t h ä l t k e i n e A n g a b e n über morphologische Restriktionen. Die zweite Schwachstelle w i r d ersichtlich, w e n n m a n s i c h d a s A b l a u f p r o t o k o l l dieses B e w e i s e s a n - / E i n e r s t e r u n d e i n w e n i g effizienterer A n s a t z z u r G e n e r i e r u n g , \ np der hier a b e r a u s P l a t z g r ü n d e n a u c h d e r e i n z i g e b l e i b e n soll, m u ß vp t(_,X):-t(mensch(X)) t(sterblich,_) \ artikel nomen t(_,X):-t(_,X) t(mensch,_) folgendes b e r ü c k s i c h t i g e n : 1. Die U b e r s e t z u n g e n v o n T e i l e n d e r s e m a n t i s c h e n kopula mühselig durch s e h r vieles B a c k t r a c k i n g „ e r r a t e n " . t(sterblich,X):-t(menschXX)) / . [alle,menschen,ist,sterblich]; schaut. Die v e r s c h i e d e n e n U b e r s e t z u n g e n w e r d e n n u r " verwen- den, i n d e m m a n d i e s m a l die A r g u m e n t s t e l l e f ü r d e n S a t z v a r i a b e l ?- adjektiv(term(sterblich,_)) 10.2.5 129 tur k o m m t . D e r u m g e k e h r t e W e g ist a u c h m ö g l i c h . D i e e b e n e r - eigenname((term(_,sokrates):-true)) kopula GENERIERUNG W i r h a b e n g e s e h e n , wie m a n v o m S a t z z u e i n e r P R O L O G - S t r u k - [ein]. kopula 10.3. Struktur praedikatsnomen müssen aufgrund morphologischer und anderer Restriktio- t(sterblich,_) n e n ( z . B . E i n b e t t u n g in eine R e d e s i t u a t i o n , in e i n e n T e x t ) gefiltert w e r d e n . alle menschen sind sterblich 2. Die G e n e r i e r u n g d e r K o n s t i t u e n t e n eines S a t z e s s o l l t e r e k u r siv ü b e r d e r s e m a n t i s c h e n S t r u k t u r a b l a u f e n s t a t t ü b e r d e m noch zu e r r a t e n d e n Satz. Zumindest die F o r d e r u n g n a c h B e r ü c k s i c h t i g u n g m o r p h o l o g i s c h e r R e s t r i k t i o n e n l ä ß t sich leicht erfüllen, i n d e m m a n die n i c h t t e r m i nalen S y m b o l e u m jeweils m i t e i n e r w e i t e r e n V a r i a b l e n v e r s i e h t , KAPITEL 130 10. DEUTSCH STATT PROLOG 10.4. die z . B . den Numerus-Abgleich zwischen Artikel u n d N o m e n und Konsequenz der zweiten Forderung artikel2(_,Numerus,Artikel), ist, daß Definite nomen(Struktur,Numerus,Nomen). C l a u s e G r a m m a r s z u m E i n s a t z für die G e n e r i e r u n g d e n k b a r u n g e - vp(Struktur,Numerus,[KopulaIPraedNomen]) e i g n e t s i n d , weil sie e n t l a n g des S a t z e s a r b e i t e n u n d n i c h t e n t l a n g :- kopula(_,Numerus.Kopula), der semantischen Struktur. praedikat snomen(Struktur,_,PraedNomen) . V o r w e g läßt s i c h s a g e n , d a ß wir f ü r die G e n e r i e r u n g e i n e spe- praedikatsnomen(Struktur,_,[Adjektiv]) zieile N o t a t i o n f ü r P R O L O G - A u s d r ü c k e u n n ö t i g w i r d , d a d i e se- :- adjektiv(Struktur,_,Adjektiv). m a n t i s c h e n S t r u k t u r e n j a i m m e r voll i n s t a n t i i e r t s i n d . D a m i t läßt praedikatsnomen(Struktur,_,NPString):- s i c h die R e k u r s i o n ü b e r die s e m a n t i s c h e n S t r u k t u r e n in u n s e r e m np(Struktur,_,NPString). Beispiel folgendermaßen beschreiben: D e r in d e n A u s d r ü c k e n a u f o b e r s t e E b e n e a u f t r e t e n d e „Funktor" 131 np(Struktur,_, [Artikel,Nomen]):- zwischen Subjekt und Verb gestattet. Eine ZUSAMMENFASSUNG '/. : - s t a m m t entweder aus der Ü b e r s e t z u n g Festlegungen auf lexikalischer Ebene artikell(_,plural,alle). eines E i g e n n a m e n o d e r eines a l l q u a n t i f i z i e r e n d e n A r tikels. artikel2(_,Singular,ein). 1. D e r K o p f e i n e r K l a u s e l ist i m m e r d i e eigenname(_,Singular,sokrates). Überset- zung einer Verbalphrase. Verbalphrasen beziehen nomen(mensch(_),singular,mensch). in u n s e r e m Beispiel ihre S e m a n t i k e n t w e d e r v o n nomen(mensch(_),plural,menschen). ( a ) einem prädikativ verwendeten Adjektiv kopula(_,singular,ist). ( b ) oder einer Nominalphrase. kopula(_,plural,sind). 2. D e r R u m p f einer K l a u s e l ist bei E i g e n n a m e n t r i vial, bei allquantifizierten N o m i n a l p h r a s e n ist e r adjektiv(sterblich(_),_,sterblich) . 1 A u f g e r u f e n w i r d dieses P r o g r a m m z u m B e i s p i e l in f o l g e n d e r m i t d e r Ü b e r s e t z u n g des N o m e n s g e f ü l l t . Weise, h i e r gleich m i t d e r A n t w o r t , d e m g e n e r i e r t e n S a t z , v e r s e hen: I n s g e s a m t b e s c h r e i b e n alle P r ä d i k a t e d r e i s t e l l i g e R e l a t i o n e n zwischen semantischen Ausdrücken, morphologischen Restriktionen Beispiel 1 0 . 1 3 und Wortfolgen. '/. Syntax fuer die ?- Generierung eigenname(_,_,Name), f vp(VPStruktur,singular,VPString). P s((VPStruktur:-NStruktur),_,[Artikel,NomenIVPString] des Generators s((sterblich(X):-mensch(X)),_,Satz). Satz = s((VPStruktur:-true),_,[Name|VPString]):- Beispiellauf 10.4 [alle,menschen,sind,sterblich] Zusammenfassung artikell(_,Numerus,Artikel), hl d i e s e m K a p i t e l h a b e n w i r gesehen,, w i e z u s a m m e n m i t d e r S y n - nomen(NStruktur,Numerus,Nomen), taxanalyse semantische Strukturen aufgebaut werden können und vp(VPStruktur,Numerus,VPString). w i e aus semantischen Strukturen w i e d e r u m S ä t z e erzeugt werden. 132 KAPITEL 10. DEUTSCH STATT PROLOG | P r i n z i p i e l l ist für b e i d e „ U b e r s e t z u n g s r i c h t u n g e n " d e r g l e i c h e M e c h a n i s m u s v e r w e n d b a r . L e g t m a n j e d o c h W e r t a u f Effizienz, sol l t e die S y n t a x a n a l y s e sich a m S a t z u n d s e i n e r s y n t a k t i s c h e n S t r u k t u r o r i e n t i e r e n . Die G e n e r i e r u n g sollte s t a t t d e s s e n r e k u r s i v ü b e r ihrer E i n g a b e s t r u k t u r , nämlich der semantischen R e p r ä s e n t a t i o n , verlaufen. 10.5 Kapitel 11 Übungen Ü b u n g 10.1 Spielen Sie m i t d e r o b e n e i n g e f ü h r t e n D C G u n d ; Eingebaute Prädikate v e r f o l g e n Sie e i n e r s e i t s den A u f b a u v o n P R O L O G - A u s d r ü c k e n | b e i m P a r s e n als a u c h d e n A u f b a u eines S a t z e s bei d e r G e n e r i e - 1 r u n g . V e r g l e i c h e n Sie d a m i t i m G e g e n z u g die e t w a s effizientere } J Version des Generators. Ü b u n g 1 0 . 2 E r w e i t e r n Sie die S y n t a x r e g e l n d e r a r t , d a ß a u c h die j| j| W o r t s t e l l u n g in f o l g e n d e n F r a g e s ä t z e b e s c h r i e b e n w i r d : 1 . W e r ist s t e r b l i c h ? 2 . Ist S o k r a t e s ein M e n s c h ? 3 . Ist S o k r a t e s s t e r b l i c h ? D i e Z i e l r e p r ä s e n t a t i o n e n sollten jeweils l a u t e n : 1. term(sterblich,_):-true 2. term(mensch,sokrates):-true 3. term(sterblich,sokrates):-true W i r h a b e n in u n s e r e n b i s h e r i g e n P r o g r a m m e n i n d e r R e g e l n u r „reines" P R O L O G , sogenanntes „pure PROLOG", verwendet. Das b e d e u t e t , d a ß w i r i m m e r n u r l o g i s c h e F o r m e l n z u r B e s c h r e i Ü b u n g 1 0 . 3 E r w e i t e r n Sie die G r a m m a t i k , so daß Adjektiven a u c h p r ä n o m i n a l ( u n d nicht n u r p r ä d i k a t i v ) v e r w e n d e t werdenj können: D a z u wird eine Erweiterung unserer selbstgebastelten von P R O L O G die L ö s u n g s s u c h e z u r B e a n t w o r t u n g v o n A n f r a gen ü b e r l a s s e n h a b e n . D i e I n s t a n t i i e r u n g v o n V a r i a b l e n in d e r Anfrage s t e l l t e die g e s u c h t e L ö s u n g d a r . L e d i g l i c h b e i m S c h r e i - alle schlauen menschen v o n P R O L O G - A u s d r ü c k e n n ö t i g sein! . bung eines P r o b l e m s entwickelt h a b e n u n d d e r I n f e r e n z m a s c h i n e Notationj ben von r e k u r s i v e n P r ä d i k a t e n m u ß t e n w i r g e l e g e n t l i c h die A b a r beitungsreihenfolge d e r K l a u s e l n d u r c h d e n P R O L O G - I n t e r p r e t e r berüchsichtigen, u m E n d l o s s c h l e i f e n z u v e r m e i d e n . D i e s s c h r ä n k t e uns bei d e r Spezifikation d e r W i s s e n s b a s i s e t w a s ein; w i r k o n n t e n nicht die volle M ä c h t i g k e i t d e r H o r n k l a u s e l - L o g i k a u s n ü t z e n . 134 KAPITEL 11. EINGEBAUTE PRÄDIKATE I n d i e s e m K a p i t e l wollen w i r n u n sehen, w e l c h e M ö g l i c h k e i t e n 11.1. EIN- UND 135 AUSGABE von P R O L O G aufzugeben. G a n z im Gegenteil. I m n ä c h s t e n K a p i - bs g i b t , E i n f l u ß a u f d e n B e w e i s , d e n P R O L O G d u r c h f ü h r t , zu n e h - tel wollen w i r a n e i n e m g r o ß e n Beispiel z e i g e n , w i e s i c h p r o z e d u - men u n d w i e w i r dies zu u n s e r e m V o r t e i l a u s n ü t z e n k ö n n e n . D i e rale u n d deklarative P r o g r a m m t e i l e s a u b e r u n d elegant z u e i n e m Vorgestellten M e c h a n i s m e n m a c h e n P R O L O G e r s t zu e i n e r voll- großen G a n z e n v e r b i n d e n lassen. wertigen P r o g r a m m i e r s p r a c h e - m i t allen V o r - u n d N a c h t e i l e n . E i l e r s e i t s w i r d es n ä m l i c h m ö g l i c h , P r o b l e m e zu lösen, d i e n i c h t m i t ler eingeschränkten Hornklausel-Logik beschreibbar sind. Ander s e i t s können solche P r o g r a m m e nicht mehr als deklarative Spe- 11.1 Ein- und Ausgabe iifikation eines P r o b l e m s aufgefaßt w e r d e n , wobei d i e L ö s u n g s s u - Soll e i n P r o g r a m m e i n e n D i a l o g m i t d e m B e n u t z e r f ü h r e n , so m u ß ihe allein S a c h e d e r I n f e r e n z m a s c h i n e i s t . S t a t t d e s s e n n i m m t d e r es in d e r L a g e sein, E i n g a b e n v o m B e n u t z e r Programmierer die L ö s u n g s s u c h e i n die eigene H a n d u n d s t e u e r t lie I n f e r e n z m a s c h i n e i n d i e v o n i h m g e w o l l t e R i c h t u n g . D a s bel e u t e t a b e r , d a ß diese P r o g r a m m e n u r n o c h prozedural, also durch lie A n a l y s e d e r z e i t l i c h e n A b f o l g e v o n B e a r b e i t u n g s s c h r i t t e n , v e r tanden werden können. Die Integration entgegenzunehmen und Ergebnisse als A u s g a b e n a u c h wieder anzuzeigen. B i s h e r h a t ten wir E i n g a b e n a n P R O L O G i m m e r d u r c h die entsprechende I n s t a n t i i e r u n g v o n V a r i a b l e n in d e r A n f r a g e g e m a c h t , Ausgaben waren die W e r t e v o n V a r i a b l e n n a c h abgeschlossenem Beweis. F ü r u n s a l s P r o g r a m m e n t w i c k l e r ist dies d u r c h a u s a n g e m e s s e n , d a w i r der Erweiterungen in P R O L O G geschieht j a auch die interne S t r u k t u r d e r P r ä d i k a t e , ihre A r g u m e n t e e t c . kirch P r ä d i k a t e , d i e v o m S y s t e m z u r V e r f ü g u n g g e s t e l l t w e r d e n . k e n n e n . W o l l e n w i r j e d o c h ein P r o g r a m m s c h r e i b e n , d a s v o n a n - ) i e s e P r ä d i k a t e sind f e s t e r B e s t a n d t e i l d e s S y s t e m s ; d a h e r nennen deren ohne Kenntnis über den P r o g r a m m a u f b a u benutzt wird, so rir sie a u c h eingebaute Prädikate o d e r built-in Prädikate. In d e r R e g e l m ü s s e n w i r zwei A s p e k t e eines s o l c h e n P r ä d i k a t s fetrachten: ist dies n i c h t a n g e b r a c h t . Z u r E i n - u n d A u s g a b e s i n d in P R O L O G - S y s t e m e n verschie- dene eingebaute Prädikate enthalten. W e n n die Inferenzmaschine w ä h r e n d des Beweises a u f ein E i n - 1 . d i e lokale logische B e d e u t u n g gabeprädikat stößt, so w i r d d e r Beweis u n t e r b r o c h e n u n d a u f eine 2 . d e n g l o b a l e n Seiteneffekt E i n g a b e des B e n u t z e r s g e w a r t e t . Ist diese erfolgt, so wird eine tisher h a b e n w i r u n s i m m e r n u r f ü r die logische B e d e u t u n g eines Variable mit der E i n g a b e als W e r t instantiiert u n d d e r Beweis d a - ' r ä d i k a t s i n t e r e s s i e r t . D i e s e ist bei e i n g e b a u t e n P r ä d i k a t e n a b e r mit fortgesetzt. A u s d e r Sicht d e r Logik b e t r a c h t e t , b e d e u t e t eine E i n g a b e , d a ß d e r B e n u t z e r n a c h d e m E r g e b n i s eines Beweiszieles leist v o n u n t e r g e o r d n e t e r W i c h t i g k e i t . D e r w i c h t i g s t e A s p e k t ist oft d e r Seiteneffekt eines P r ä d i k a t s , l i t Seiteneffekt ist g e m e i n t , d a ß d e r A u f r u f d e s P r ä d i k a t s d u r c h gefragt wird. Stößt die Inferenzmaschine a u f eine A u s g a b e a n w e i s u n g , so ie I n f e r e n z m a s c h i n e i r g e n d e i n e A k t i o n b e w i r k t , d i e n i c h t a u s - wird einfach d a s A r g u m e n t des P r ä d i k a t s a u f d e m Bildschirm aus- diließlich v o n lokaler B e d e u t u n g f ü r dieses P r ä d i k a t i s t , s o n d e r n g e g e b e n u n d d e r B e w e i s f o r t g e s e t z t . A u f d e n B e w e i s selbst h a t e i n e lobal e i n e V e r ä n d e r u n g d e s S y s t e m z u s t a n d e s b e w i r k t . A u s g a b e keinen E i n f l u ß . W i c h t i g ist lediglich d e r Seiteneffekt, d a s S o l a n g e w i r n u r „ r e i n e s " P R O L O G v e r w e n d e n , g i b t es k e i n e eiteneffekte. O h n e die in diesem Kapitel vorgestellten Erweiterungen kann ian i n d e r P r a x i s m i t P R O L O G n i c h t a u s k o m m e n . D a s bedeu:t a b e r n i c h t , d a ß w i r gewillt sind, alle b i s h e r g e z e i g t e n V o r t e i l e A n z e i g e n d e r g e w ü n s c h t e n I n f o r m a t i o n . B e i d e r A u s g a b e ist dieser Seiteneffekt a u s S i c h t d e r L o g i k h a r m l o s , d a d a s E r g e b n i s d e s B e w e i s e s nicht beeinflußt w i r d . D i e E i n - u n d A u s g a b e k a n n in P R O L O G a u f zwei v e r s c h i e d e nen E b e n e n erfolgen: 136 KAPITEL 11. EINGEBAUTE 21.1. PRÄDIKAT 137 AUSGABE bietet P R O L O G d i e z w e i t e G r u p p e v o n P r ä d i k a t e n z u r z e i c h e n - 2. einzelne Zeichen: g e t O , p u t weisen E i n - u n d A u s g a b e a n . E s bleibt d a n n v o l l s t ä n d i g d e m P r o g r a m m i e r e r ü b e r l a s s e n , die B e n u t z e r e i n g a b e z u a n a l y s i e r e n u n d Ein- und Ausgabe von Termen für die w e i t e r e V e r a r b e i t u n g geeignet a u f z u b e r e i t e n . W e n d e n w i r u n s z u n ä c h s t der e r s t e n M ö g l i c h k e i t z u . V o m B e n u t z e r w i r d bei r e a d e r w a r t e t , d a ß die E i n g a b e g e n a u d e r S y n t a x v o n P R O L O G - T e r m e n e n t s p r i c h t . I m P r i n z i p k a n n a l s o alles eing e g e b e n w e r d e n , was s o a u c h i m P r o g r a m m t e x t UND wird. Dies w i r d m a n a b e r i . a . nicht v o r a u s s e t z e n k ö n n e n . D e s h a l b 1. P R O L O G - T e r m e : r e a d , w r i t e 11.1.1 EIN- s t e h e n könnte. 11.1.2 Ein- und Ausgabe von Einzelzeichen Durch d a s P r ä d i k a t g e t O ( X ) w i r d ein e i n z e l n e s Z e i c h e n v o n d e r A u ß e r d e m m u ß j e d e E i n g a b e m i t e i n e m P u n k t u n d e i n e m Zeilen- T a s t a t u r e i n g e l e s e n u n d die V a r i a b l e X d a m i t i n s t a n t i i e r t . D u r c h v o r s c h u b b e e n d e t w e r d e n . Die A u s g a b e d u r c h w r i t e e r f o l g t in ei- put w i r d ein Z e i c h e n a u f d e m B i l d s c h i r m a u s g e g e b e n . n e r F o r m , die v o n P R O L O G a u c h w i e d e r a l s E i n g a b e v e r s t a n d e n r e p r ä s e n t i e r t d a b e i ein Zeichen d u r c h s e i n e n ASCII-Code' . 1 PROLOG 2 Im A S C I I - C o d e w i r d j e d e m B u c h s t a b e n , j e d e r Ziffer u n d v e r s c h i e - würde. D a s einfachste Interaktionsmuster für den Dialog P R O L O G ist: Benutzer- denen S o n d e r z e i c h e n jeweils eine g a n z e Z a h l z w i s c h e n 0 u n d 1 2 7 z u g e o r d n e t . D e r B u c h s t a b e ' a ' ist z . B . d u r c h d i e Z a h l 9 7 r e p r ä s e n tiert, d a s L e e r z e i c h e n d u r c h 3 2 . A b e r k e i n e A n g s t , w i r m ü s s e n interaction :- nicht d e n A S C I I - C o d e a u s w e n d i g l e r n e n , u m m i t P R O L O G ar- read(X), beiten z u k ö n n e n . W i c h t i g ist n u r , sich f o l g e n d e E i g e n s c h a f t e n z u do_something(X,Y), merken: write(Y). 1. D i e Ziffern 0 - 9 h a b e n a u f s t e i g e n d e C o d e s o h n e A b s t ä n d e Beispiel 11.1 M i t diesem S c h e m a k ö n n e n w i r z . B . d e n Parser a u s K a p i t e l 9 a u f r u f e n . D a m i t e r g i b t sich d a s f o l g e n d e P r o g r a m m 2. D i e B u c h s t a b e n a - z u n d d e r d a r g e s t e l l t e Beispieldialog. 3. Die B u c h s t a b e n A - Z run haben aufsteigende Codes ohne A b - stände : - haben aufsteigende Codes ohne Ab- stände read(Satz), s(Syntaxbaum,Satz, []) , Die k o n k r e t e n Z a h l e n w e r t e für die C o d i e r u n g e i n z e l n e r B u c h s t a - write(Syntaxbaum). ben k ö n n e n w i r v o n P R O L O G e r f a h r e n , z . B . liefert " 0 " d e n Z a h lenwert 4 8 , d e r d e r Ziffer 0 z u g e o r d n e t ist. ?- run. B e i s p i e l 1 1 . 2 W i r wollen ein P r ä d i k a t g e t - d i g i t ( X ) [john.loves.mary]. s(np(n(j ohn)),vp(v(loves),np(n(mary)))) yes Die Verwendung der Prädikate r e a d u n d w r i t e schreiben, d a s s o l a n g e Z e i c h e n v o n d e r T a s t a t u r e i n l i e s t , bis e i n e Ziffer g e funden wird. Mit deren A S C I I - C o d e wird X intanziiert. erfordert B e n u t z e r i m m e r n o c h , d a ß die S y n t a x v o n P R O L O G get_digit(X) vom 'Leider funktioniert das bei den meisten PROLOG-Systemen nicht 100%-ig :- getO(X), eingehalten 2 American Standard Code for Information Interchange 138 KAPITEL 11. EINGEBAUTE PRÄDIKATE 11.2. 139 KONTROLLE X >= "0", Leider l a s s e n sich a b e r i n r e a l i s t i s c h e n A n w e n d u n g e n d i e s e P r o - X =< "9". g r a m m t e i l e nicht v e r m e i d e n . get_digit(X) :- W i r empfehlen, bereits j e t z t die Ü b u n g 1 1 . 1 get_digit(X). Je get.digit(X). f durchzuführen, um ein e r s t e s G e f ü h l f ü r die E r s t e l l u n g „ p r o z e d u r a l e r " P R O L O G P r o g r a m m e zu b e k o m m e n . ?- abcdl X = 11.2 49 yes Kontrolle Die P r ä d i k a t e , die w i r in d i e s e m A b s c h n i t t v o r s t e l l e n w e r d e n , e r - A l l e E i n - u n d A u s g a b e p r ä d i k a t e sind deterministisch , d . h . sie sind '. g e n a u e i n m a l m i t e i n e r e i n d e u t i g e n L ö s u n g b e w e i s b a r . W e n n die v I n f e r e n z m a s c h i n e ü b e r B a c k t r a c k i n g eine w e i t e r e L ö s u n g s u c h t , so arbeiten z u k ö n n e n , die in „ r e i n e m " P R O L O G n i c h t f o r m u l i e r b a r durch geschickte S t e u e r u n g d e r I n f e r e n z m a s c h i n e e r h e b l i c h v e r b e s s e r n . nämlich das „ V e r b r a u c h e n " von E i n g a b e z e i c h e n nicht rückgängig E i n e Möglichkeit z u r K o n t r o l l e h a b e n w i r b e r e i t s k e n n e n g e - g e m a c h t - w i e sollte d a s a u c h m ö g l i c h sein. Dieses d e t e r m i n i s t i s c h e V e r h a l t e n e r k l ä r t die z w e i t e K l a u s e l ! , i m P r ä d i k a t g e t _ d i g i t . W e n n in d e r e r s t e n K l a u s e l k e i n e Ziffer |; b r a u c h t " , b a c k t r a c k i n g liefert a b e r a u c h keine w e i t e r e weis z u k o n t r o l l i e r e n . Dies ist m a n c h m a l n ö t i g , u m P r o b l e m e b e sind. Oft k a n n m a n a u c h d i e Effizienz eines P r o g r a m m e s e r g i b t ein solches P r ä d i k a t i m m e r fail. A u c h w i r d d e r Seiteneffekt, gelesen w u r d e , s o ist diese Ziffer a u s d e r E i n g a b e b e r e i t s lauben u n s , die I n f e r e n z m a s c h i n e bei d e r S u c h e n a c h e i n e m B e - „ver-4 Lösung.'^' O h n e eine z w e i t e K l a u s e l w ü r d e d a s g a n z e P r ä d i k a t e i n f a c h fehl- * s c h l a g e n , w e n n b e i m e r s t e n V e r s u c h keine Ziffer e i n g e g e b e n wird. ? D i e z w e i t e K l a u s e l m u ß also die E i n g a b e w i e d e r h o l e n , falls die e r s t e K l a u s e l fehlschlug. D a z u ruft sie e i n f a c h w i e d e r d i e erste*'; K l a u s e l a u f , o h n e selbst eine E i n g a b e z u v e r l a n g e n . D i e s geschieht ^ s o l a n g e , bis e n d l i c h eine Ziffer e i n g e g e b e n w i r d . lernt: D i e g e s c h i c k t e A n o r d n u n g v o n K l a u s e l n u n d v o n beweiszielen i n n e r h a l b e i n e r K l a u s e l . B e i r e k u r s i v e n Unter- Prädikaten haben w i r z . B . die A b b r u c h b e d i n g u n g m e i s t a l s e r s t e K l a u s e l a u f geschrieben, u m s i c h e r z u s t e l l e n , d a ß P R O L O G n i c h t in e i n e E n d losschleife g e r ä t . W i r h a b e n h i e r a l s o a u s g e n ü t z t , d a ß K l a u s e l n i m m e r in d e r A u f s c h r e i b r e i h e n f o l g e z u b e w e i s e n v e r s u c h t w e r d e n . In d e r a p p e n d - V e r s i o n u n s e r e s e r s t e n P a r s e r s i n K a p i t e l 8 w a r die R e i h e n f o l g e d e r U n t e r b e w e i s z i e l e i n j e d e r K l a u s e l a u c h n i c h t zufällig. E s w u r d e i m m e r e r s t m i t a p p e n d e i n e Z e r l e g u n g d e r L i s t e erzeugt u n d diese d a n n als d i e r i c h t i g e z u b e w e i s e n v e r s u c h t . P r i n zipiell h ä t t e m a n a p p e n d a u c h a m E n d e j e d e r K l a u s e l s c h r e i b e n Zwei w e i t e r e A u s g a b e p r ä d i k a t e sind in d e r P r a x i s w i c h t i g , weil können: sie z u r G e s t a l t u n g v o n A u s g a b e n s e h r n ü t z l i c h sind. s(S) nl steht f ü r new line u n d führt d a z u , d a ß die A u s g a b e a m A n f a n g . d e r n ä c h s t e n Zeile f o r t g e s e t z t w i r d . tab(N) 'ijs* gibt N Leerzeichen aus. -* I 4 Die P r o g r a m m i e r u n g v o n E i n - u n d A u s g a b e p r ä d i k a t e n kann || :- np(NP), vp(VP), append(NP,VP,S) . Aber w a s b e d e u t e t d a s f ü r d e n A b l a u f d e s B e w e i s e s ? PROLOG muß n u n alle m ö g l i c h e n N o m i n a l p h r a s e n u n d alle m ö g l i c h e n V e r b a l p h r a s e n d e r G r a m m a t i k g e n e r i e r e n , s o l a n g e bis b e i d e z u s a m - e i n e t r i c k r e i c h e A n g e l e g e n h e i t sein, die einige E r f a h r u n g e r f o r d e r t . % men zufällig d e n E i n g a b e s a t z e r g e b e n . B e i e i n e r g r o ß e n D i e dabei e n t s t e h e n d e n P r o g r a m m e h a b e n in d e r R e g e l w e n i g matik kann das natürlich beliebig lange d a u e r n . In der v o n uns v o n ,^ der Ästhetik, die sonst P R O L O G - P r o g r a m m e n n a c h g e s a g t wird. $ Gram- 140 KAPITEL 11. EINGEBAUTE PRÄDIKA 11.2. 141 KONTROLLE g e w ä h l t e n R e i h e n f o l g e d a g e g e n w i r d v e r s u c h t , m ö g l i c h s t viel v - möglich w i r d . Die beiden folgenden K l a u s e l n s i n d a b s o l u t g l e i c h - h a n d e n e Information möglichst früh für den B e w e i s zur Verfü bedeutend: z u stellen. Implizit h a b e n w i r also b e r e i t s seit l a n g e m E i n f l u ß a u f den fakt(a,b,c). A b l a u f eines B e w e i s e s d u r c h P R O L O G g e n o m m e n . I m folgendwollen wir einige P r ä d i k a t e b e s p r e c h e n , m i t d e n e n explizit fakt(a,b,c) :- true. die InBei m a n c h e m P r o g r a m m e n w i r d d e m P r o g r a m m i e r e r viel A r b e i t ferenzmaschine gesteuert wird. a b g e n o m m e n , w e n n er nicht z w i s c h e n F a k t e n u n d R e g e l n u n t e r - 11.2.1 scheiden m u ß . So w e r d e n viele Spezialfälle i m P r o g r a m m v e r m i e - Success und Failure den u n d alles w i r d wesentlich e i n f a c h e r u n d ü b e r s i c h t l i c h e r . D e s - M a n c h m a l ist es n ü t z l i c h , d e r I n f e r e n z m a s c h i n e z u s a g e n , daß halb w u r d e b e r e i t s bei d e r S e m a n t i k k o n s t r u k t i o n in K a p i t e l die S u c h e n a c h e i n e m B e w e i s eines P r ä d i k a t s z w e c k l o s ist. Oder von dieser M ö g l i c h k e i t G e b r a u c h g e m a c h t . m a n m ö c h t e g e r n e alle L ö s u n g e n z u e i n e m B e w e i s z i e l ausgege?. b e n h a b e n ; d a n n b e n ö t i g t m a n e i n e . M ö g l i c h k e i t , e x p l i z i t Back-'& t r a c k i n g a u s z u l ö s e n . D a z u stellt P R O L O G d a s P r ä d i k a t f a i l Das eingebaute repeat könnten wir auch selber schreiben d u r c h die folgende Definition: zur« Verfügung. repeat. repeat Beispiel 11.3 Prädikat 10 M a n e r h ä l t alle P e r m u t a t i o n e n d e r L i s t e [ a , b , c ] :- repeat. $ Der N a m e r e p e a t d r ü c k t d a s V e r h a l t e n des P r ä d i k a t e s a u s : W e n n v o n d e m P r ä d i k a t p e r m u t e a u s Ü b u n g 7.1 d u r c h f o l g e n d e Anfragen B a c k t r a c k i n g in e i n e r K l a u s e l z u r e p e a t z u r ü c k f ü h r t , s o w i r d d e r ?- permute([a,b,c],X), write(X), nl, fail. M [a.b.c] ,j| [a,c,b] I [b,a,c] /| [b,c,a] i| [c.a.b] I [c,b,a] ' -j no I m Z u s a m m e n h a n g m i t d e m cut Teil d e r K l a u s e l n a c h d e m r e p e a t n o c h m a l s v e r s u c h t z u b e w e i s e n , also w i e d e r h o l t . B e i s p i e l 1 1 . 4 Mit r e p e a t können wir das Prädikat get-digit aus d e m v o r i g e n A b s c h n i t t e t w a s v e r e i n f a c h e n : get_digit(X) :- repeat, werden wir im n ä c h s t e n getO(X), Ab- schnitt nochmals auf f a i l zu sprechen k o m m e n . ^ D a s P r ä d i k a t t r u e h a t die gleichen E i g e n s c h a f t e n w i e ein ein-H zelner Fakt X >= "0", X =< "9". Aber Vorsicht: E i n r e p e a t true. einer E n d l o s s c h l e i f e f ü h r e n : A u c h gibt es keinerlei Seiteneffekte. Alst) ist t r u e e i g e n t l i c h völlig endlos :- r e d u n d a n t . D a ß es t r o t z d e m v o r h a n d e n ist, h a t s e i n e n G r u n d d a - repeat, r i n , d a ß s o eine e i n h e i t l i c h e S i c h t w e i s e a u f F a k t e n u n d fail. Regeln in e i n e r K l a u s e l k a n n s e h r leicht z u 142 KAPITEL 11.2.2 11. EINGEBAUTE PRÄDIKATE' 11.2. Cut 143 KONTROLLE b(B), Das berühmt-berüchtigte cui-Prädikat, geschrieben einfach als A u s r u f e z e i c h e n , ist d a s L i e b l i n g s w e r k z e u g v i e l e r P R O L O G - H a c k e r und gleichzeitig PROLOG der beschäftigt. Alptraum Der cut jedes stellt Logikers, den der i n d e n B e w e i s g a n g der I n f e r e n z m a s c h i n e d a r , d e r in m ö g l i c h ist. Intensive V e r w e n d u n g v o n cut sich extremsten in e i n e m mit Eingriff PROLOG Programm m a c h t dieses fast i m m e r völlig u n v e r s t ä n d l i c h u n d zeigt a u ß e r d e m , d a ß d e r P r o g r a m m i e r e r die P r i n z i p i e n d e r L o g i k p r o g r a m m i e r u n g n o c h nicht richtig v e r i n n e r l i c h t h a t . Soviel a l s W a r n u n g i m v o r a u s . D o c h w a s t u t der cut n u n e i g e n t l i c h ? Die G r u n d i d e e des cut ist e s , g a n z e B e r e i c h e a u s d e m Such- r a u m d e r I n f e r e n z m a s c h i n e bei e i n e r B e w e i s s u c h e h e r a u s z u s c h n e i - e(e2). den, daher auch der N a m e . W i r wollen hier a b e r nicht versuchen, d i e s e x a k t u n d f o r m a l k o r r e k t zu b e s c h r e i b e n . S t a t t d e s s e n werden w i r z u e r s t ein prinzipielles B e i s p i e l f ü r d i e V e r w e n d u n g des Die E r g e b n i s s e v o n a l u n d a 2 s i n d v e r s c h i e d e n : cut g e b e n u n d dieses e r l ä u t e r n . I m A n s c h l u ß d a r a n z e i g e n w i r einige ?- t y p i s c h e A n w e n d u n g e n . W e r d a m i t n o c h n i c h t g e n u g h a t , d e r sei h i e r m i t a u f die einschlägige L i t e r a t u r v e r w i e s e n . W e n n die I n f e r e n z m a s c h i n e bei e i n e m B e w e i s a u f e i n e n s t ö ß t , so geschieht f o l g e n d e s : D e r B e w e i s v o n cut liefert cut. success fail. [bl,c2,dl,el][bl,c2,dl,e2][bl,c2,d2,el][bl,c2,d2,e2] [b2,cl,dl,el][b2,cl,dl,e2][b2,cl,d2,el][b2.cl.d2.e2] no ?- a2(X), ziel, in d e m der cut a u f t r i t t , w e r d e n u n v e r ä n d e r l i c h f e s t g e l e g t . Mit les, w a s vor d e m cut write(X), [b2,c2,dl,el][b2,c2,dl,e2][b2,c2,d2,el][b2,c2,d2,e2] u n d alle I n s t a n t i i e r u n g e n seit d e m B e w e i s b e g i n n f ü r d a s Beweisa n d e r e n W o r t e n , es w i r d kein a l t e r n a t i v e r B e w e i s v e r s u c h t , f ü r al- al(X), [bl.cl.dl.el][bl,cl,dl,e2][bl,cl,d2,el][bl,cl,d2,e2] : steht. vrite(X), fail. [bl.cl.dl.el][bl,cl.dl,e2][bl,cl,d2,el][bl,cl,d2,e2] no B e i s p i e l 1 1 . 5 Z u r E r l ä u t e r u n g d e r F u n k t i o n s w e i s e v o n cut W a s h a t die V e r w e n d u n g des cut in u n s e r e m B e i s p i e l v e r ä n d e r t ? be- t r a c h t e n wir die b e i d e n P r ä d i k a t e a l u n d a 2 , d i e a u f derselben E n t s p r e c h e n d d e r B e s c h r e i b u n g d e r F u n k t i o n s w e i s e d e s cut, F a k t e n b a s i s a r b e i t e n . Sie s i n d i d e n t i s c h bis a u f d e n cut i n a 2 . folgt eine F e s t s c h r e i b u n g d e r V a r i a b l e n i n s t a n t i i e r u n g e n z u m Z e i t punkt d e r A u s f ü h r u n g des cut. al([B,C,D,E]) P r ä d i k a t a 2 s o f o r t i n s g e s a m t fail, b(B), X X c(C), d(D), * l -t '•'tj' a2([B,C,D,E]) :- F ü r a 2 h e i ß t dies k o n k r e t : B ist mit b l u n d C m i t c l i n s t a n t i i e r t . B e i m B a c k t r a c k i n g e r g i b t :- e(E). er- jf das w e n n d e r cut e r r e i c h t w i r d . D i e a n d e r e n L ö s u n g e n f ü r die U n t e r b e w e i s z i e l e b ( B ) u n d c ( C ) spie- len keine R o l l e m e h r . F ü r d ( D ) u n d e ( E ) w e r d e n d a g e g e n n a c h wie vor alle m ö g l i c h e n L ö s u n g e n b e s t i m m t . H i n t e r d e m cut ist B a c k t r a c k i n g in d e r ü b l i c h e n W e i s e m ö g l i c h . D i e s e r k l ä r t d i e u n terschiedlichen R e s u l t a t e v o n a l u n d a 2 . 144 KAPITEL 11. EINGEBAUTE 11.3. PRADIKA W i r k ö n n e n u n s die W i r k u n g s w e i s e d e s cut 145 META-PROGRAMMIERUNG steuerpflichtig s i n d , d a ß A u s l ä n d e r - u n t e r b e s t i m m t e n veranschaulichen zusätzli- w e n n w i r u n s e i n e T ü r v o r s t e l l e n , die n u r a u f e i n e r S e i t e eine« chen B e d i n g u n g e n - in D e u t s c h l a n d s t e u e r f r e i s i n d , S t e u e r p f l i c h t K l i n k e b e s i t z t . W e n n w i r d u r c h diese T ü r h i n d u r c h g e h e n u n d sief erst a b e i n e m g e w i s s e n M i n d e s t e i n k o m m e n v o r l i e g t , h i n t e r u n s ins S c h l o ß gefallen i s t , s o g i b t es kein Z u r ü c k . G e n a u s o ! e r g e h t es d e r I n f e r e n z m a s c h i n e m i t d e m cut. Wenn beim Beweis! d e s P r ä d i k a t e s a 2 e i n m a l d e r cut a u s g e f ü h r t w u r d e , s o g i b t es k e i n f Z u r ü c k m e h r . Stellt die I n f e r e n z m a s c h i n e s p ä t e r f e s t , d a s B a c k t r a c k i n g n ö t i g ist u n d g e l a n g t a n d e n cut steuerpflichtig(Person) steuerpflichtig(Person) '$1 W i e b e r e i t s e r w ä h n t , ist die V e r w e n d u n g d e s cut m ö g l i c h s t z u l Zusatzbedingungen(Person), '., mindesteinkommen(Mindesteinkommen) Einkommen E i n e dieser A n w e n d u n g e n , f ü r die d e r cut u n b e d i n g t benötigt'^ d.h. m a n m ö c h t e d r ü c k e n , d a ß ein P r ä d i k a t u n t e r b e s t i m m t e n B e d i n g u n g e n p :- q, !, !, aus-1 Eine w e i t e r e z e n t r a l e A n w e n d u n g d e s cut ist e s , f ü r g e w i s s e P r ä d i Back- tracking ein w e i t e r e s M a l zu b e w e i s e n , s c h e i t e r n . S o l c h e k a t s , n ä m l i c h die cut-fail-Kombination. Die W i r k u n g in u n s e r e m ^ nistischen t r a c k i n g a u s . Z u r ü c k s e t z e n ü b e r d e n cut ist a b e r n i c h t möglich;J p f p S o m i t h a b e n w i r g e n a u die B e d i n g u n g r e a l i s i e r t , d a ß p une r f ü l l b a r i s t , falls q gilt. h a b e n w i r b e r e i t s bei d e r E i n - u n d A u s g a b e Prädikate p ist d e t e r m i n i s t i s c h cut alle w e i t e r e n B e w e i s v e r s u c h e u n t e r b u n d e n u n d f a i l l ö s t B a c k - 5 s o m i t e r g i b t p i n s g e s a m t fail. determi- kennengelernt. W i r e r h a l t e n h i e r f o l g e n d e s S c h e m a : F a l l ist e i n f a c h z u b e s c h r e i b e n : S o b a l d q b e w i e s e n i s t , w e r d e n mit ^ am z u f o r d e r n . W i r wollen a l s o P r ä d i k a t e , d i e h ö c h - stens eine L ö s u n g e r g e b e n u n d b e i m V e r s u c h , sie d u r c h fail. Auch , Mindesteinkommen, f a i l . kate Eindeutigkeit falls q gilt Hier sehen wir eine der häufigsten A n w e n d u n g e n des f a i l - P r ä d i - 1 Beispiel 11.6 < nicht] e r f ü l l b a r ist. H i e r z u folgendes S c h e m a : p ist unerfiillbar, :- einkommen(Person,Einkommen), f w i r d , ist die B e s c h r e i b u n g v o n Negation; f a i l . steuerpflichtig(Person) v e r m e i d e n . E s g i b t j e d o c h einige F ä l l e , in d e n e n dies u n u m g ä n g l i c h ? ist. :- auslaender(Person), ab-, zuschließen. :- hausbesitzer(Person). z u r ü c k , s o b l e i b t nur' ü b r i g , i n s g e s a m t a u f z u g e b e n u n d d e n B e w e i s f ü r a 2 m i t fail .... ... !. : - . . . , ! . '/. ALLE '/. V e r d e n '/, Klauseln m i t '! ' abgeschlossen Falls sich n u n eine d e r K l a u s e l n f ü r p b e w e i s e n l ä ß t , s o w i r d die Finanzamt geht die Hochtechnologie, nicht s p u r l o s v o r ü b e r . E i n eifriger B e a m t e r b e s c h l i e ß t n a c h dem] B e s u c h eines V o l k s h o c h s c h u l k u r s e s „ G r u n d k u r s P R O L O G f ü r F i n a n z b e a m t e " , ein P r o g r a m m z u e n t w i c k e l n , d a s die S t e u e r s c h u l d J eines B ü r g e r s b e r e c h n e t . Teil dieses P r o g r a m m s ist ein steuerpflichtig(Person), Prädikatj I n f e r e n z m a s c h i n e a u f diese L ö s u n g f ü r p f e s t g e l e g t , u n d es k a n n keine w e i t e r e K l a u s e l ü b e r B a c k t r a c k i n g e r r e i c h t w e r d e n . Somit ist h ö c h s t e n s eine L ö s u n g f ü r p m ö g l i c h . 11.3 Meta-Programmierung d a s f ü r e i n e g e g e b e n e P e r s o n über-' p r ü f t , o b ü b e r h a u p t Steuepflicht v o r l i e g t . In d i e s e m P r ä d i k a t wer-; Eine besondere Eigenschaft von P R O L O G d e n z . B . die B e d i n g u n g e n b e r ü c k s i c h t i g t , d a ß H a u s b e s i t z e r i m m e r ! nur logische F o r m e l n als P r o g r a m m e a n g e b e n , s o n d e r n a u c h ist e s , d a ß w i r n i c h t Aus- 146 KAPITEL sagen über logische Formeln 11. EINGEBAUTE ¡1.3. m a c h e n k ö n n e n . W e n n w i r dies tun! s o b e f i n d e n w i r u n s d a m i t in einer meta-logischen k e n n e n Meta-Ebenen PRÄDIKA E b e n e . W i r aÜe a u s u n s e r e m A l l t a g . W e n n z . B . w ä h r e n d ei- n e r D i s k u s s i o n plötzlich ü b e r die F o r m d e r D i s k u s s i o n u n d nicht m e h r ü b e r d a s T h e m a g e s p r o c h e n w i r d , h a b e n w i r eine solch! M e t a - E b e n e b e t r e t e n . N u r m a c h t sich e i g e n t l i c h n i e m a n d einen s o l c h e n W e c h s e l wirklich b e w u ß t ; wir k ö n n e n g a n z selbstverständlich d a m i t u m g e h e n . B e i d e r P R O L O G - P r o g r a m m i e r u n g müssen w i r u n s a l l e r d i n g s s t e t s i m klaren d a r ü b e r s e i n , w e l c h e r A r t die A u s s a g e n s i n d , die wir i m P r o g r a m m a u f s c h r e i b e n . V e r l a s s e n wir d i e E b e n e d e r Hornklausellogik, u m A u s s a g e n ü b e r F o r m e l n zu m a c h e n , s p r e c h e n w i r von Meta-Programmierung. ?- atom(hallo). yes ?- Variablen, f ü r u n s i n t e r e s s a n t , i m P r o g r a m m d e n T y p e i n e s T e r m s z u erfahr e n . D a z u stellt u n s P R O L O G folgende e i n g e b a u t e P r ä d i k a t e zur Verfügung: Jf var(X) * gilt, falls X eine u n i n s t a n t i i e r t e V a r i a b l e i s t gilt, falls X keine u n i n s t a n t i i e r t e V a r i a b l e ist; d . h . X ist ein A t o m , eine Z a h l o d e r eine k o m p l e x e S t r u k t u r atom(X) gilt, falls X ein A t o m ist integer(X) atomic(X) -t' 1 6 ?- f var(X). * var(hallo). ?r no ?- no atom(X). welche werden! yes ?- integer(4711). yes i n t e g e r ( ' 4 7 1 1 ' ) . '/. Atome s i n d k e i n e ?- Zahlen! no ?- atomic(4711). atomic('4711') . 11.3.2 =.. Wenn w i r n o r m a l e r w e i s e in e i n e m P r o g r a m m S t r u k t u r e n v e r w e n den wollen, s o t u n wir dies, i n d e m w i r sie e i n f a c h b e n u t z e n . E i n Prädikat, d a s v e r s c h i e d e n e S t r u k t u r e n b e h a n d e l n soll, e n t h ä l t einfach für j e d e einzelne eine eigene K l a u s e l m i t d e r j e w e i l i g e n S t r u k tur als A r g u m e n t . W a s a b e r t u n , w e n n w i r i n einem Prädikat alle möglichen S t r u k t u r e n b e h a n d e l n w o l l e n ? D e n k e n w i r z . B . a n d e n „pretty p r i n t e r " a u s Ü b u n g 1 1 . 1 . W e n n w i r d i e s e s P r o g r a m m s o erweitern wollen, d a ß e s beliebige S t r u k t u r e n a u s g i b t , s o b e n ö t i - kennen. yes ?- aber zuzugreifen, die wir z u m Z e i t p u n k t d e r P r o g r a m m e r s t e l l u n g n i c h t gilt, falls X ein A t o m o d e r e i n e Z a h l ist D i e folgenden B e i s p i e l e sollen d a s V e r h a l t e n d i e s e r P r ä d i k a t e ver- ?- '/. k o e n n e n Atome! gen wir eine M ö g l i c h k e i t , a u f F u n k t o r u n d A r g u m e n t e v o n T e r m e n gilt, falls X eine Z a h l ist deutlichen: atom('4711'). sind keine yes A t o m e , Z a h l e n o d e r k o m p l e x e S t r u k t u r e n sein. M a n c h m a l ist es nonvar (X) '/, Z a h l e n yes Klassifikation von Termen W i e w i r b e r e i t s wissen, k ö n n e n T e r m e i n P R O L O G atom(471l). no ?- 11.3.1 147 META-PROGRAMMIERUNG V M Z u d i e s e m Zweck gibt e s e i n e i n g e b a u t e s P r ä d i k a t = . . , a u s historischen G r ü n d e n univ X =. . L genannt. b e d e u t e t : X ist e i n T e r m , d e s s e n F u n k t o r d a s e r s t e E l e m e n t d e r L i s t e L ist u n d d e s s e n A r g u m e n t e d i e ü b r i g e n E l e m e n t e d e r L i s t e sind Die f o l g e n d e n Beispiele i l l u s t r i e r e n die M ö g l i c h k e i t e n v o n = . . : KAPITEL 148 11. EINGEBAUTE 11.3. PRÄDIKATE listvar(Complex,In,Out) X = a(b,c,d) Complex = . . yes ?- :- [FunctorlArgs] , listvars(Args,In,Out). a(b,c,d) X = = .. X. listvars([],In,In). [a.b.c.d] yes ?- a(X,c,d) listvars([ArglArgs],In,Out) = .. [Y.blZ]. listvars(Args,Out 1,Out). Y = a Z = [c.d] ?- yes X =.. [Y,b,c,d]. listvar(a(X,Y),L). X = _005D Y = _006D L = no ? - -X [_005D,_006D] yes Cal.], no Bei d e r I m p l e m e n t i e r u n g v o n l i s t v a r w u r d e ein g ä n g i g e r T r i c k D i e l e t z t e n b e i d e n F ä l l e zeigen eine w i c h t i g e E i n s c h r ä n k u n g : Zur z u m A u f s a m m e l n v o n E r g e b n i s s e n bei r e k u r s i v e n P r ä d i k a t e n b e - Z e i t d e r A u s f ü h r u n g v o n = . . m u ß d e r F u n k t o r u n d die A n z a h l d e r A r g u m e n t e des T e r m s b e k a n n t s e i n . P R O L O G i s t n i c h t in ' d e r L a g e , T e r m e m i t v a r i a b l e m F u n k t o r o d e r v a r i a b l e r Steifigkeit v o n = . . ist bei v e r s c h i e d e n e n P R O L O G - S y s t e m M a n c h m a l e r g i b t sich - w i e in u n s e r e m P R O L O G - S y s t e m - ledig- , B e i s p i e l 1 1 . 7 E s soll ein P r ä d i k a t l i s t v a r 3 listvar Argumente haben dabei folgende B e d e u t u n g : unterschiedlich. m a n c h m a l a u c h eine S y s t e m f e h l e r m e l d u n g . n u t z t . Dieser T r i c k ist so hä uf i g in d e r P r a x i s z u finden, d a ß e r h i e r e i n m a l e r l ä u t e r t w e r d e n soll. D a s zweistellige P r ä d i k a t ruft als einzige A k t i o n ein dreistelliges P r ä d i k a t l i s t v a r auf. D i e z u b e h a n d e l n . D i e R e a k t i o n a u f eine s o l c h e f a l s c h e V e r w e n d u n g lieh e i n fail, :- listvar(Arg,In,Out1), X = b ?- 149 META-PROGRAMMIERUNG Y í e n t w i c k e l t werden, d a s a l l e in e i n e r g e g e b e n e n S t r u k t u r e n t h a l t e n e n V a r i a b l e n in einer ; 1. die a k t u e l l z u b e a r b e i t e n d e S t r u k t u r 2. die L i s t e d e r b e r e i t s g e f u n d e n e n V a r i a b l e n 3. die L i s t e d e r V a r i a b l e n n a c h v o l l s t ä n d i g e r A b a r b e i t u n g dieses A u f r u f e s v o n listvar Liste aufsammelt. Das zweite A r g u m e n t listvar(Struct.ListOfVariables) :- listvar(Struct,[].ListOfVariables), i dient d e m A u f s a m m e l n al- Konstruktion auch von einem Akkumulator. A u s d e r B e d e u t u n g d e r A r g u m e n t e e r g e b e n s i c h die B e d i n g u n gen, die in d e n e i n z e l n e n K l a u s e l n a u s g e d r ü c k t s i n d : listvar(Var,In,[VarlIn]) var(Var) . listvar(Atomic,In,In) atomic(Atomic) von l i s t v a r ler bislang g e f u n d e n e n E r g e b n i s s e . M a n s p r i c h t bei e i n e r s o l c h e n :- :- . 3\Vir werden dieses Prädikat im nächsten Kapitel wieder benötigen 1. die a k t u e l l e S t r u k t u r ist e i n e V a r i a b l e : n i m m die g e f u n d e n e Variable zur Liste der bereits bekannten Variablen hinzu 2. die a k t u e l l e S t r u k t u r ist a t o m a r : die L i s t e d e r b e r e i t s g e f u n denen Variablen bleibt unverändert 150 KAPITEL 11. EINGEBAUTE PRÄDIKATE'- 11.3. 151 META-PROGRAMMIERUNG ff 3 . die a k t u e l l e S t r u k t u r ist ein k o m p l e x e r T e r m : zerlege den T e r m m i t = . . in F u n k t o r u n d L i s t e d e r A r g u m e n t e u n d füge assert(X) t r ä g t d e n T e r m X in die D a t e n b a s i s ein. retract(X) löscht die e r s t e K l a u s e l d e r D a t e n b a s i s , die m i t X alle V a r i a b l e n , die in d e n A r g u m e n t e n e n t h a l t e n sind, zur als T e r m unifizierbar ist. Ü b e r B a c k t r a c k i n g w e r d e n w e i t e r e Eingabeliste hinzu passende E i n t r ä g e gelöscht. Das Prädikat l i s t v a r s benutzt einfach l i s t v a r , u m f ü r jedes A r g u m e n t des k o m p l e x e n T e r m s die V a r i a b l e n z u r E i n g a b e l i s t e Sehr wichtig ist es, zu b e a c h t e n , d a ß d i e S e i t e n e f f e k t e v o n a s s e r t hinzuzufügen. und r e t r a c t , also die V e r ä n d e r u n g e n i n d e r D a t e n b a s i s , beim B a c k t r a c k i n g nicht z u r ü c k g e n o m m e n w e r d e n . 11.3.3 Manipulation der Datenbasis W i r wissen b e r e i t s , d a ß in P R O L O G P r ä d i k a t e u n d T e r m e absolut i d e n t i s c h a u f g e b a u t sind. E i n F a k t ist n i c h t s a n d e r e s als ein Term m i t d e m P r ä d i k a t s n a m e n als F u n k t o r . E i n e R e g e l ist ein Term mit dem Funktor : - , d e r K o p f ist d a s e r s t e A r g u m e n t u n d der R u m p f das zweite. F ü r b e s t i m m t e F u n k t o r e n wie z . B . :-, =.., . . . e r l a u b t u n s P R O L O G lediglich e i n e v e r e i n f a c h t e Schreibweise. S o l c h e speziellen F u n k t o r e n heißen Beispiel 11.8 Operatoren. Beispiel 1 1 . 9 Das Prädikat r e t r a c t a l l ( X ) soll alle F a k t e n , die mit X als T e r m unifizierbar sind u n d alle R e g e l n , d e r e n K o p f m i t X unifizierbar ist, a u s der D a t e n b a s i s l ö s c h e n . D a z u n ü t z e n w i r a u s , daß r e t r a c t b e i m B a c k t r a c k i n g jeweils e i n e n w e i t e r e n Eintrag löscht, s o l a n g e bis keine w e i t e r e M ö g l i c h k e i t b e s t e h t . retractall(X) :- retract(X), D i e d r i t t e K l a u s e l a u s B e i s p i e l 1 1 . 3 . 2 m ü ß t e ohne fail. r e t r a c t a l l (X) V e r w e n d u n g von O p e r a t o r e n die f o l g e n d e F o r m e r h a l t e n : :- retract((X:-Y)), :-(listvar(Complex,In,0ut), fail. ','(=..(Complex,[FunctorlArgs]), retractall(X). listvars(Args,In,Out) ) Die e r s t e K l a u s e l v o n r e t r a c t a l l ) löscht alle passenden F a k t e n , die zweite alle p a s s e n d e n R e g e l n u n d d i e d r i t t e s o r g t d a f ü r , d a ß D e r P R O L O G - I n t e r p r e t e r weiß ü b e r die spezielle B e d e u t u n g der r e t r a c t a l l i m m e r m i t success beendet wird. F u n k t o r e n : - u n d , B e s c h e i d u n d b e n u t z t sie z u r S t e u e r u n g der Inferenzmaschine. Wenn nun aber T e r m e und P r ä d i k a t e g e n a u dieselbe Form h a b e n , w a s liegt d a n n n ä h e r , als P r ä d i k a t e e b e n f a l l s w i e T e r m e 11.3.4 Call Im v o r i g e n A b s c h n i t t h a b e n w i r d i e D a t e n b a s i s m a n i p u l i e r t , die a l s D a t e n z u b e h a n d e l n , sie zu k o n s t r u i e r e n o d e r z u v e r ä n d e r n ? die I n f e r e n z m a s c h i n e f ü r i h r e B e w e i s e b e n ü t z t . J e t z t wollen w i r U n s fehlen lediglich n o c h M ö g l i c h k e i t e n , s o k o n s t r u i e r t e P r ä d i k a t e das e i n g e b a u t e P r ä d i k a t c a l l v o r s t e l l e n , m i t d e m w i r d e r Infe- i n die D a t e n b a s i s e i n z u t r a g e n o d e r sie d e r I n f e r e n z m a s c h i n e als r e n z m a s c h i n e einen T e r m als B e w e i s z i e l ü b e r g e b e n k ö n n e n . Beweisziel z u ü b e r g e b e n . ' v Z u r M a n i p u l a t i o n d e r D a t e n b a s i s stellt P R O L O G d i e f o l g e n - . den eingebauten Prädikate zur Verfügung: Beispiel 1 1 . 1 0 Das Prädikat u n i q u e ( P ) soll d i e e r s t e Lösung des P r ä d i k a t s P liefern. B a c k t r a c k i n g e r g i b t d a n n s o f o r t /<u7,-" 152 KAPITEL unique(P) 11. EINGEBAUTE PRÄDIKATE 11.3. :- E l e m e n t d e r L i s t e L zu unifizieren. Ü b e r B a c k t r a c k i n g e r h ä l t m a r n a c h e i n a n d e r alle L ö s u n g e n . B e t r a c h t e n w i r d a m i t f o l g e n d e Beispiele v o n b a g o f u n d s e t o f : die I n f e r e n z m a s c h i n e angewiesen, P z u b e w e i s e n ; g e h t dies g u t , folgt s o f o r t d e r cut, ?- bagof(X,member(X,[b,a,c,b]),L). L = [b,a,c,b] yes wodurch weitere L ö s u n g e n für u n i q u e abgeschnit- ten werden. D a s P r ä d i k a t u n i q u e ist ein g u t e s B e i s p i e l d a f ü r , w i e in ei- ?setof(X,member(X,[b.a.c.b]),L). L = [a,b,c] n e m P r o g r a m m die V e r w e n d u n g des cut v e r m i e d e n w e r d e n k a n n . S t a t t i m P r ä d i k a t P den cut e i n z u s e t z e n , r e a l i s i e r t m a n e i n e cutfreie 15: B e i s p i e l 1 1 . 1 1 Die P r ä d i k a t m e m b e r ( X , L ) v e r s u c h t X m i t e i n e n call(P), D i e R e a l i s i e r u n g ist sehr einfach: es w i r d lediglich m i t c a l l META-PROGRAMMIERUNG t yes Version von P und benützt beim A u f r u f von P das Prädikat Mit d e n M ö g l i c h k e i t e n z u r M e t a - P r o g r a m m i e r u n g , die P R O L O G uns b i e t e t , k ö n n e n w i r leicht e i n e e i g e n e V a r i a n t e v o n b a g o f r e a lisieren. u n i q u e , u m a u s z u d r ü c k e n , d a ß P hier d e t e r m i n i s t i s c h ist. D i e s hat a u ß e r d e r R e d u z i e r u n g d e r A n z a h l v o n cut i m P r o g r a m m zwei weit e r e schöne Effekte: B e i s p i e l 1 1 . 1 2 D a s P r ä d i k a t m y - b a g o f ( X , P , L ) soll a l l e E r g e b nisse v o n P f ü r d i e V a r i a b l e X in d e r L i s t e L e r g e b e n . 1 . d e r L e s e r des P r o g r a m m s sieht s o f o r t b e i m A u f r u f v o n P, d a ß hier ein d e t e r m i n i s t i s c h e s P r ä d i k a t v o r l i e g t 2 . d a s P r ä d i k a t P k a n n allgeiner g e s c h r i e b e n w e r d e n u n d da- » d u r c h e h e r a u c h in e i n e m a n d e r e n P r o g r a m m w i e d e r v e r w e n - 1 det werden \ I m N o r m a l f a l l liefert ein B e w e i s in P R O L O G i m m e r e i n e L ö s u n g zu einer Anfrage und dann über B a c k t r a c k i n g evtl. weitere. I n ' m a n c h e n F ä l l e n ist es a b e r n ü t z l i c h , s t a t t e i n e r L ö s u n g s o f o r t eine L i s t e m i t allen m ö g l i c h e n L ö s u n g e n f ü r ein P r ä d i k a t z u e r h a l t e n . ••• D a z u stellt P R O L O G zwei e i n g e b a u t e P r ä d i k a t e z u r V e r f ü g u n g : bagof (X,P,L) ergibt in L die L i s t e a l l e r L ö s u n g e n f ü r X, die für * d a s P r ä d i k a t P möglich s i n d setof(X,P,L) a r b e i t e t wie b a g o f , a b e r d o p p e l t e L ö s u n g e n wer- ; d e n a u s d e r L i s t e L e n t f e r n t u n d a u ß e r d e m w i r d L in der i, my_bagof(X.P.L) :- compute_all(X,P), list_all(L), compute_all(X,P) :- call(P), assert(bagof_solution(X)), fail. compute_all(X,P). list_all([XlL]) :- retract(bagof_solution(X)) , list_all(L). list.alKC]) . Regel sortiert Mit c o m p u t . a l l e D a m i t diese P r ä d i k a t e sinnvolle L ö s u n g e n e r g e b e n , m u ß n a t ü r l i c h die V a r i a b l e X in d e m P r ä d i k a t P v o r k o m m e n . w e r d e n ü b e r B a c k t r a c k i n g alle L ö s u n g e n Prädikats P erzeugt u n d der jeweilige W e r t für X m i t a s s e r t des in « e D a t e n b a s i s e i n g e t r a g e n . D a b e i m u ß X n a t ü r l i c h e i n e in P aufw e n d e V a r i a b l e sein, s o n s t ist dies ( m e i s t ) sinnlos. M i t list.all 154 KAPITEL 11. EINGEBAUTE PRÄDIKATE^ w e r d e n die L ö s u n g e n n a c h e i n a n d e r w i e d e r a u s d e r I Datenbasis'" g e l ö s c h t u n d d a b e i in einer L i s t e a u f g e s a m m e l t . 11.3.5 '* Not •,; yes ?- unverheirateter_student(X) . no Also folgert P R O L O G m e s s e r s c h r f , d a ß P e t e r ein u n v e r h e i r a t e t e r S t u d e n t ist. Soweit f u n k t i o n i e r t d a s P r ä d i k a t a l s o . D i e z w e i t e A n - k ö n n e n u n s ein P r ä d i k a t n o t ( P ) s c h r e i b e n , d a s g e r a d e d a n n be- frage, bei der das P r ä d i k a t m i t e i n e r V a r i a b l e n a u f g e r u f e n w i r d , w e i s b a r ist, w e n n P nicht b e w e i s b a r ist: soll die F r a g e b e a n t w o r t e n , w e r e i n u n v e r h e i r a t e t e r S t u d e n t ist. Eigentlich würden wir e r w a r t e n , d a ß als E r g e b n i s P e t e r b e s t i m m t :- wird. Dies funktioniert leider n i c h t . P R O L O G v e r s u c h t call(P), !, löö ist S t u d e n t u n d es gibt keinen B e w e i s d a f ü r , d a ß e r v e r h e i r a t e t ist. call läßt sich Negation auch noch etwas universeller ausdrücken. Wir not(P) SONSTIGES Das E r g e b n i s d e r e r s t e n A n f r a g e i m B e i s p i e l ist v ö l l i g k l a r : P e t e r I m Z u s a m m e n h a n g m i t d e m cut h a b e n w i r b e r e i t s e i n e F o r m der N e g a t i o n von Prädikaten gesehen. D u r c h V e r w e n d u n g von 11.4. nämlich z u n ä c h s t z u zeigen, d a ß es n i e m a n d e n g i b t , d e r v e r h e i r a t e t fail. ist. Dies gelingt a b e r nicht u n d s c h o n s c h e i t e r t d a s g e s a m t e P r ä d i k a t . not(P). W ü r d e m a n die b e i d e n U n t e r b e w e i s z i e l e i m R u m p f v e r t a u s c h e n , In der ersten Klausel von n o t wird versucht, P zu F a l l s d i e s gelingt, folgt sofort eine c u i - / o i 7 - K o m b i n a t i o n , n o t ( P ) fail erhielte m a n d a s g e w ü n s c h t e E r g e b n i s . beweisen. Dies liegt d a r a n , d a ß d a n n i m n e g i e r t e n B e w e i s z i e l k e i n e u n - wodurch i n s t a n t i i e r t e V a r i a b l e m e h r a u f t r i t t . A l l g e m e i n gilt: e r g i b t . F a l l s P nicht b e w e i s b a r i s t , e r h ä l t m a n d u r c h d i e z w e i t e K l a u s e l d a n n success. '. ; I n P R O L O G ist m e i s t a u c h ein e i n g e b a u t e s P r ä d i k a t f ü r n o t E r g e b n i s , w e n n in d e m n e g i e r t e n B e w e i s z i e l k e i n e u n - v o r h a n d e n , d a s als \+ g e s c h r i e b e n w i r d . intantiierten Variablen vorkommen. L e i d e r w i r d d u r c h n o t keine volle N e g a t i o n i m S i n n e d e r Logik a u s g e d r ü c k t . W a s P R O L O G realisiert ist d i e s o g e n a n n t e as failure. Dies m u ß d e r V e r w e n d u n g v o n N e g a t i o n i m m e r negation Dies f ü h r t m a n c h m a l z u e t w a s u n i n t u i t i v e n E r g e b n i s - B e i s p i e l 1 1 . 1 3 Das Prädikat berücksichtigt w e r d e n u n d e v t l . die R e i h e n f o l g e d e r U n t e r b e w e i s z i e l e in e i n e r Klausel entsprechend gewählt werden. s e n , w i e es d a s folgende Beispiel i l l u s t r i e r t . u n v e r h e i r a t e r . s t u d e n t (X) ü b e r p r ü f e n , o b eine g e g e b e n e P e r s o n ein u n v e r h e i r a t e r N e g a t i o n in P R O L O G liefert n u r d a n n e i n k o r r e k t e s soll 11.4 Student ist: Sonstiges H e u t i g e P R O L O G - S y s t e m e b i e t e n in d e r R e g e l e i n e V i e l z a h l einunverheirateter_student(X) \+ :- g e b a u t e r P r ä d i k a t e , die alle f ü r d i e v e r s c h i e d e n s t e n verheiratet(X), Aufgaben m e h r oder weniger nützlich sind. E s w ü r d e a b e r z u weit führen, Student(X). h i e r a u c h n u r alle j e n e z u b e s p r e c h e n , die s o g a r i n e i g e n t l i c h al- Student(peter). len S y s t e m e n v o r h a n d e n sind. W i r wollen u n s a u f e i n e A u s w a h l b e s c h r ä n k e n , die ein M i n i m u m d a r s t e l l t , u m i n d e r P r a x i s r e a - verheiratet(hans). * listische P r o g r a m m e z u e n t w i c k e l n . D a z u f e h l e n u n s n o c h einige wenige P r ä d i k a t e , die in diesem A b s c h n i t t z u s a m m e n g e f a ß t sind. ?- unverheirateter_student(peter). KAPITEL 156 11.4.1 11. EINGEBAUTE PRÄDIKATE Arithmetische Ausdrücke I n m a n c h e n F ä l l e n g e n ü g t es n i c h t , d u r c h U n i f i k a t i o n i m m e r k o m I arithmetische Ausdrücke auch gerne einmal ihren W e r t berechnen i k ö n n e n . D a z u b i e t e t P R O L O G einige a r i t h m e t i s c h e O p e r a t o r e n , w i e z . B . +, - , * , / u n d mod, u n d e i n e n E v a l u a t i o n s o p e r a t o r i s a n . Y SONSTIGES 157 D a aber Stringverarbeitung sehr häufig v o r k o m m t u n d Listen I p l e x e r e T e n n e aufzubauen, sondern m a n m ö c h t e insbesondere für X is 11.4. gilt, falls Y ein a r i t h m e t i s c h e r A u s d r u c k ist, a l s o n u r von A S C I I - C o d e s für den P r o g r a m m i e r e r sehr unleserlich sind, b i e t e t P R O L O G e i n e spezielle S c h r e i b w e i s e f ü r S t r i n g s a n . S t a t t [97,110,116,111,110] darf einfach a u c h " a n t o n " geschrieben w e r d e n . P R O L O G ü b e r s e t z t dies z u r V e r a r b e i t u n g in d i e e n t s p r e chende Liste. Beispiel 11.14 Eines der wichtigsten P r ä d i k a t e der Stringverar- arithmetische O p e r a t o r e n , Zahlen, Variablen u n d K l a m m e r n b e i t u n g ist c o n c a t e n a t e ( S l , S 2 , S ) , d a s V e r k e t t e n z w e i e r S t r i n g s e n t h ä l t , in d e m alle V a r i a b l e n m i t Z a h l e n i n s t a n t i i e r t sind S l u n d S2 zu e i n e m G e s a m t s t r i n g S. D u r c h d i e D a r s t e l l u n g und X mit d e m Ergebnis der Berechnung, der L i s t e n ist dies t r i v i a l : I Evaluation, als v o n Y unifiziert w i r d . concatenate(Sl,S2,S) I A u ß e r d e m b e s t e h t die M ö g l i c h k e i t , die W e r t e v o n a r i t h m e t i s c h e n :- append(Sl,S2,S). A u s d r ü c k e n i h r e r G r ö ß e n a c h zu v e r g l e i c h e n . X < Y gilt, falls die E v a l u a t i o n v o n X eine W e r t e r g i b t , d e r ner als d e r W e r t d e r E v a l u a t i o n v o n Y ist X =< Y e n t s p r e c h e n d m i t kleiner oder gleich X >= Y e n t s p r e c h e n d m i t größer oder gleich X > Y entsprechend mit 11.4.2 Unter klei- D a z u schreiben wir d a s Prädikat s u b s t r i n g ( S , S u b S , N ) , wobei N die P o s i t i o n des T e i l s t r i n g s SubS in S i s t . substring(S,SubS,N) größer :- append(Prefix,Rest,S), append(SubS,Suffix,Rest), Strings e i n e m String B e i s p i e l 1 1 . 1 5 E i n e w e i t e r e w i c h t i g e A u f g a b e ist e s , f e s t z u s t e l len o b ein g e g e b e n e r S t r i n g einen z w e i t e n S t r i n g a l s Teil e n t h ä l t . length(Prefix.lf) . v e r s t e h t m a n eine F o l g e v o n Zeichen, die m a n bearbeiten können möchte. Im Gegensatz zu A t o m e n m u ß Die Realisierung von s u b s t r i n g verwendet append, u m den String b e i S t r i n g s a u c h d e r Zugriff a u f Teile m ö g l i c h sein. D i e V e r a r b e i - S in drei Teile s o z u z e r l e g e n , d a ß SubS g e r a d e d e n m i t t l e r e n Teil t u n g v o n Z e i c h e n k e t t e n stellt eine s e h r h ä u f i g a u f t r e t e n d e A u f g a b e d a r s t e l l t . M i t l e n g t h w i r d die L ä n g e d e s T e i l e s v o n S b e s t i m m t , f ü r d e n P r o g r a m m i e r e r d a r . In d e n m e i s t e n P r o g r a m m i e r s p r a c h e n d e r v o r SubS liegt, w a s g e r a d e d e r P o s i t i o n v o n SubS in S e n t - g i b t es d e s h a l b eine spezielle D a t e n s t r u k t u r f ü r S t r i n g s . P R O L O G s p r i c h t , falls m a n die P o s i t i o n s z ä h l u n g bei N u l l b e g i n n t . 4 d a g e g e n kennt keine s o l c h e S p e z i a l s t r u k t u r . S t a t t d e s s e n v e r w e n d e t m a n e i n f a c h Listen von ASCII-Codes. Dies h a t d e n V o r t e i l , d a ß alle M ö g l i c h k e i t e n d e r L i s t e n v e r a r b e i t u n g f ü r S t r i n g s v e r w e n d e t Beispiel 11.16 Ein Prädikat zur Berechnung der Länge eines S t r i n g s k ö n n e n w i r leicht definieren d u r c h : w e r d e n k ö n n e n , w e i s P R O L O G e i n e s e h r g r o ß e F l e x i b i l i t ä t bei d e r Stringverarbeitung gibt. A u ß e r d e m h a b e n die m e i s t e n A n w e n d u n gen mit Ein- und A u s g a b e zu tun. U n d hier verwendet ebenfalls A S C I I - C o d e s . PROLOG ^Natürlich ist diese Realisierung sehr ineffizient. Ein gezielt arbeitendes Suchverfahren wäre besser als das blinde Probieren von Zerlegungen durch append. 158 KAPITEL 11. EINGEBA UTE PRÄDIKATE 11.5. 159 BEISPIEL •* «1? 11.5.1 length([] , 0 ) . length([First IRest],N) :- Die g e w ü n s c h t e A u s g a b e v o n r e a d - s e n t e n c e length(Rest.M), N is Entwurf M+l. {• G e l e g e n t l i c h m ö c h t e m a n A t o m e in S t r i n g s v e r w a n d e l n o d e r u m - steht bereits fest: eine L i s t e v o n W ö r t e r n , d i e d u r c h S t r i n g s d a r g e s t e l l t s i n d . S t r i n g s wiederum sind Listen von A S C I I - C o d e s . Die e r s t e G r o b s k i z z e f ü r d a s P r o g r a m m sieht a l s o s o a u s : g e k e h r t . D a z u g i b t es in P R O L O G d a s e i n g e b a u t e P r ä d i k a t name: name ( A , S ) gilt, falls A ein A t o m u n d S ein S t r i n g ist, s o d a ß die einzelne E l e m e n t e d e r L i s t e S g e r a d e d e n A S C I I - C o d e s der • Einlesen eines Satzes bedeutet Einlesen einer • E i n l e s e n einer L i s t e v o n W ö r t e r n b e d e u t e t in A e n t h a l t e n e n B u c h s t a b e n e n t s p r e c h e n Liste von Wörtern Einlesen eines W o r t e s gefolgt v o n e i n e r L i s t e v o n W ö r t e r n D i e P a r s e r für u n s e r e b i s h e r i g e n G r a m m a t i k e n e r w a r t e n S ä t z e imm e r a l s L i s t e n v o n A t o m e n . W e n n w i r a l l e r d i n g s e i n e n S a t z mit r e a d . s e n t e n c e einlesen, so erhalten wir Listen von Strings. Um u n s e r e P a r s e r w e i t e r v e r w e n d e n zu k ö n n e n , m ü s s e n w i r e i n e Konv e r t i e r u n g d u r c h f ü h r e n . D a z u s c h r e i b e n w i r ein P r ä d i k a t c o n v e r t . B e i s p i e l 1 1 . 1 7 Das Prädikat convert (Atoms, S t r i n g s ) soll e i n e L i s t e v o n A t o m e n a u f eine e n t s p r e c h e n d e L i s t e v o n Strings • E i n l e s e n eines W o r t e s b e d e u t e t E i n l e s e n eines e i n z e l n e n Z e i c h e n s gefolgt v o n einer L i s t e v o n Z e i c h e n Über die T a s t a t u r w e r d e n einzelne Z e i c h e n e i n g e g e b e n . W i r e r h a l t e n a l s o lediglich eine F o l g e v o n A S C I I - C o d e s . W i e k a n n d i e s e r Folge die g e w ü n s c h t e S t r u k t u r g e g e b e n w e r d e n ? D a z u h a l t e n w i r folgendes fest: abbilden und umgekehrt. • die E i n g a b e eines P u n k t e s o d e r F r a g e z e i c h e n s b e e n d e t c o n v e r t ( [ ] , [] ) . convert([Atom I Atoms],[String I S t r i n g s ] ) :- • ein W o r t ist eine z u s a m m e n h ä n g e n d e K e t t e v o n Z e i c h e n , d i e name(Atom,String), k e i n e L e e r z e i c h e n sind. O d e r a n d e r s f o r m u l i e r t : e i n W o r t e n - convert(Atoms.Strings). 11.5 den Satz de erkennt m a n durch das Einlesen eines L e e r z e i c h e n s Beispiel D a r a u s e r g e b e n sich die A b b r u c h b e d i n g u n g e n f ü r d a s E i n l e s e n v o n W o r t l i s t e n u n d Zeichenlisten. W i r wollen ein P r ä d i k a t r e a d - s e n t e n c e ( X ) e n t w i c k e l n , d a s einen A n d i e s e r Stelle ist es sehr w i c h t i g , s i c h d a r a n z u e r i n n e r n , d a ß S a t z v o n d e r T a s t a t u r einliest u n d ihn a l s e i n e L i s t e v o n S t r i n g s sämtliche Ein- und Ausgabeprädikate deterministisch sind u n d ihr i n d e r V a r i a b l e n X a b l e g t . E i n Beispiel z u r I l l u s t r a t i o n : ?- Seiteneffekt b e i m B a c k t r a c k i n g n i c h t r ü c k g ä n g i g g e m a c h t w e r d e n kann. W e n n w i r also b e i m E i n l e s e n eines L e e r z e i c h e n s d i e s e s als read_sentence(X). dies ist ein X = ["dies","ist","ein","satz","."] W o r t e n d e b e h a n d e l n wollen, s o d ü r f e n w i r in d e r e n t s p r e c h e n d e n satz. K l a u s e l n i c h t e i n f a c h ein Zeichen e i n l e s e n u n d p r ü f e n , o b e i n L e e r zeichen vorliegt. E i n solches V o r g e h e n w ü r d e , falls es s i c h u m kein sehr L e e r z e i c h e n h a n d e l t , dieses a u f N i m m e r w i e d e r s e h e n a u s d e r E i n - u n ü b e r s i c h t l i c h a u s s i e h t , d a die S t r i n g s v o n P R O L O G als L i s t e n g a b e v e r b r a u c h e n , s o d a ß eine a n d e r e K l a u s e l , d i e e i g e n t l i c h d i e s e n von A S C I I - C o d e s ausgegeben werden. Fall b e h a n d e l n soll, dieses Z e i c h e n g a r n i c h t m e h r s i e h t . D i e A u s g a b e w u r d e e t w a s a u f b e r e i t e t , weil sie t a t s ä c h l i c h 160 KAPITEL 11. EINGEBAUTE PRÄDIKAT U.6. Char i s W i r m ü s s e n a l s o sicherstellen, d a ß e i n Z e i c h e n n u r e i n m a l eing e l e s e n u n d d a n n a u c h wirklich v e r a r b e i t e t w i r d , b e v o r ein weiten ".". read.wordlist(Char,["?"]) Char i s res Zeichen eingelesen wird. 161 ZUSAMMENFASSUNG :- "?". read.wordlist(Char,[FirstWordlRestOfWordList]) 11.5.2 :- read.word(Char,FirstWord,FirstCharOfNextWord), Realisierung read.wordlist(FirstCharOfNextWord.RestOfWordList). H i e r ist n u n a l s o d a s v o l l s t ä n d i g e P r o g r a m m : '/, r e a d . w o r d ( C h a r , W o r d , F i r s t C h a r O f N e x t W o r d ) 7. read_sentence(Sentence) 7. 7. Z w e c k : Einlesen 7, A r g u m e n t e : Sentence eines Satzes von d e r 7, bei CALL: u n i n s t a n t i i e r t e 7. bei EXIT: 7. B e i s p i e l : ?- 7. X = 7. H i n w e i s e : - ist ein aufeinanderfolgende getrennt 7. 7, - die Woerter Leerzeichen Satzes oder e i n wird 7. e i n e n Punkt 7, u n m i t t e l b a r n a c h dem l e t z t e n X beendet. 7, KEIN L e e r z e i c h e n - 7. innerhalb Insbesondere verwendet read_sentence(ListOfWords) durch Fragezeichen darf Wort '/, das erste Zeichenliste ist Zeichen " auf deren als des n a e c h s t e n read_word(Char, [] .NextChar) is Word, und g i b t 3. erstes Argument Wortes zurueck :- ", read.word (Char, [ ] , Char) Char is read.word (Char, [] ,Char) Char is :- ".". :- "?". read.word(Char,[Char I RestOfWord],FirstCharOfNextWord) getO(NextChar), read.word(NextChar,RestOfWord,FirstCharOfNextWord). vorher stehen des S a t z e s Satzzeichen 7. ."] sein Eingabe e i n e s eine getO(NextChar). ["dies","ist","ein","satz"," zwei liest Zeichen Char Char satz. muessen durch genau e i n 7, Variable STRINGS read.sentence(X). > dies 7. LISTE v o n Tastatur '/, '/, duerfen keine werden 11.6 Zusammenfassung Wenn Sie in die V e r l e g e n h e i t k o m m e n , e i n m a l ein g r ö ß e r e s P r o g r a m m z u e n t w i c k e l n , d a n n b e s o r g e n Sie sich d a s H a n d b u c h I h r e s :- P R O L O G - S y s t e m s u n d v e r s c h a f f e n sich e i n e n U b e r b l i c k ü b e r die .getO(Char), dort v o r h a n d e n e n e i n g e b a u t e n P r ä d i k a t e . A b e r ein w i c h t i g e r T i p ist a n g e b r a c h t : H a l t e n Sie s i c h m i t read_wordlist(Char,ListOfWords), der V e r w e n d u n g spezieller K o n s t r u k t i o n e n , laubt 7. 7, eine Liste von W o e r t e r n , 7, Zeichen Char i s t read_wordlist(Char,["."]) Wenn Sie I h r P r o g r a m m die Ihr S y s t e m später einmal tion sonst m e i s t s e h r g r o ß . V e r w e n d e n Sie a l s o n a c h M ö g l i c h k e i t deren erstes nur die h i e r u n d d a r ü b e r h i n a u s vielleicht g e r a d e n o c h die in [DECsystem-10 Prolog User's Manual] beschriebenen :- er- a u f ei- n e m a n d e r e n P R O L O G - S y s t e m v e r w e n d e n w o l l e n , ist d i e F r u s t r a - read_wordlist(Char,WordList) liest zurück. Prädikate. :- 162 KAPITEL 11. EINGEBAUTE PRÄDIKATE* D i e s e w e r d e n Sie in f a s t allen P R O L O G - S y s t e m e n f i n d e n . Die Implementierung von Prädikaten zur E i n - und Ausgabe ¡1.7. 163 ÜBUNGEN reverse ( [ ] , [ ] ) . reverse([First|Rest],ReversedList) :- ist in P R O L O G oft e i n e e x t r e m kniffelige A n g e l e g e n h e i t . U m dem reverse(Rest.ReversedRest), P r o g r a m m i e r e r diese l ä s t i g e n u n d z e i t r a u b e n d e n A r b e i t e n zu er- append([First].ReversedRest.ReversedList) . l e i c h t e r n , b i e t e n viele S y s t e m e z u s ä t z l i c h w e i t e r e e i n g e b a u t e P r ä d i k a t e a n . L e s e n Sie d o c h einfach m a l i m H a n d b u c h z u Ihrem S y s t e m n a c h , b e v o r Sie g r a u e H a a r e b e i m S c h r e i b e n e i n e r Benutzerschnittstelle für eines Ihrer P r o g r a m m e b e k o m m e n ! W e n n Sie S p e z i a l i t ä t e n Ihres P R O L O G - S y s t e m s ausnützen, s o l l t e n Sie d e r e n G e b r a u c h i m m e r g u t d o k u m e n t i e r e n u n d außerd e m d a r a u f a c h t e n , d a ß sie n u r i n n e r h a l b w e n i g e r P r ä d i k a t e vork o m m e n . D e r G r o ß t e i l des S y s t e m s sollte i m m e r in Standard- P R O L O G g e s c h r i e b e n sein. Benutzen Sie d e n i m A b s c h n i t t 1 1 . 3 . 2 b e s c h r i e b e n e n T r i c k , u m ein effizientes P r o g r a m m z u m U m d r e h e n e i n e r L i s t e z u s c h r e i b e n . Übung 11.4 E r w e i t e r n Sie f ü r d a s P r o b l e m w e g s u c h e a u s K a - pitel 5 die M e n g e d e r F a k t e n ü b e r m ö g l i c h e V e r b i n d u n g e n . L a s sen Sie z u , d a ß e i n z e l n e V e r b i n d u n g e n a u c h in d e r G e g e n r i c h t u n g begangen w e r d e n k ö n n e n . U n t e r s u c h e n Sie d a s von ? - Ablaufverhalten w e g s u c h e ( S t a r t , E n d e , Weg) . . W e l c h e s P r o b l e m ist e n t - s t a n d e n ? W i e k ö n n t e d e m a b g e h o l f e n w e r d e n ? V e r b e s s e r n Sie d a s Programm entsprechend. 11.7 Übungen Übung 11.1 Ü b u n g 1 1 . 5 E r w e i t e r n Sie d a s P r ä d i k a t r e a d . s e n t e n c e a u s A b - S c h r e i b e n Sie ein P r ä d i k a t , d a s e i n e L i s t e übersicht- lich a u s g i b t , z . B . a u f j e d e r Zeile ein E l e m e n t . E i n P r o g r a m m , das schnitt 1 1 . 5 s o , d a ß b e s t i m m t e D a t e n s t r u k t u r e n in einer speziellen, g u t l e s b a r e n F o r m 1. zwischen W ö r t e r n beliebig viele L e e r z e i c h e n s t e h e n k ö n n e n a u s g i b t , n e n n e n w i r pretty 2. S a t z z e i c h e n wie K o m m a , S e m i k o l o n , . . . i n n e r h a l b eines S a t - printer. zes v e r w e n d e t w e r d e n d ü r f e n . S a t z z e i c h e n sollen a l s eigenÜ b u n g 11.2 E r w e i t e r n Sie d a s P r ä d i k a t a u s Ü b u n g 1 1 . 1 s o , daß Listenelemente, die w i e d e r u m Listen sind, g e n a u s o aufbereitet Ü b u n g 1 1 . 3 D a s folgende P r o g r a m m z u m U m d r e h e n einer Liste w i r d oft a u c h „ n a i v e r e v e r s e " g e n a n n t , weil es u n m i t t e l b a r die I d e e , wie eine L i s t e u m z u d r e h e n ist, in ein r e k u r s i v e s Prädikat u m s e t z t . L e i d e r b e n ö t i g t es e i n e n e n o r m e n R e c h e n a u f w a n d . ständige W ö r t e r behandelt werden 3 . v o r d e m S a t z z e i c h e n a m S a t z e n d e b e l i e b i g viele L e e r z e i c h e n Kapitel 12 Ein kleines Dialogsystem In d i e s e m K a p i t e l wollen w i r ein kleines D i a l o g s y s t e m e n t w i c k e l n u n d d a b e i die F r ü c h t e d e r A r b e i t d e r l e t z t e n K a p i t e l e r n t e n . Es soll gezeigt w e r d e n , w i e d i e e i n z e l n e n T e i l e , die w i r b e r e i t s k e n n e n , sinnvoll u n d e i n f a c h z u e i n e m g r ö ß e r e n G a n z e n z u s a m m e n g e s t e c k t werden können. U n s e r D i a l o g s y s t e m soll z . B . z u f o l g e n d e m D i a l o g in d e r L a g e sein: ?- dialog. > ist sokrates sterblich? nein > a l l e menschen ok sind sterblich, philosophischen 166 KAPITEL > sokrates ist 12. ein EIN KLEINES mensch, ( p r o c e s s ) . Anschließend wird d a s Ergebnis ausgegeben ok > ist sokrates sterblich? Mit der E i n g a b e ade kann der B e n u t z e r den Dialog beenden. Wir w o l l e n s p ä t e r p r o c e s s ist sterblich? j sterblich? Dialog b e e n d e t w i r d . V o r A u f r u f des P r ä d i k a t s i n p u t e r z e u g e n wir m i t p r o m p t ein ist xanthippe ein mensch, Symbol a u f d e m B i l d s c h i r m , d a s d e m B e n u t z e r a n d e u t e n soll, d a ß er m i t d e r E i n g a b e a n d e r R e i h e ist. E i n s o l c h e s S y m b o l sterblich? man einen nennt Prompt. a > wer ist sokrates > Verarbeitung von d i a l o g , in d e r n u r n o c h a d e a u s g e g e b e n w i r d u n d d a n n d e r xanthippe > xanthippe ok > ist so r e a l i s i e r e n , d a ß die von a d e ein fail e r g i b t . D i e s f ü h r t u n s d a n n in die z w e i t e K l a u s e l sokrates > ist nein (output) und schließlich d e r D i a l o g v o n v o r n e b e g o n n e n . ja > wer 167 DIALOGSYSTEM prompt sterblich? xanthippe ade. ade : - XI is ">" , X2 is " , " put(XI), put(X2). D i e A u f g a b e b e s t e h t a l s o d a r i n , S ä t z e e i n z u l e s e n , z u e r k e n n e n , ob es sich u m A u s s a g e s ä t z e o d e r F r a g e n h a n d e l t , b e i A u s s a g e n d e r e n B e d e u t u n g abzuspeichern und Fragen entsprechend d e m vorhand e n e n W i s s e n zu b e a n t w o r t e n . W i r können sofort das Prädikat d i a l o g dialog Zur Realisierung von input benutzen wir das Prädikat r e a d _ s e n t e n c e . D a d u r c h e r h a l t e n wir eine L i s t e v o n S t r i n g s . D a u n s e r e P a r s e r a b e r e i n e L i s t e v o n A t o m e n als E i n g a b e e r w a r t e n , benutzen wir c o n v e r t zur U m w a n d l u n g . D a s letzte E l e m e n t angeben: der L i s t e ist ein S a t z z e i c h e n . M i t d e l e t e _ l a s t l ö s c h e n w i r d i e s e s a u s der L i s t e . D i e L i s t e o h n e d a s S a t z z e i c h e n ist die e i g e n t l i c h e E i n - :- prompt, g a b e , die z u a n a l y s i e r e n ist. G l e i c h z e i t i g v e r w e n d e n w i r d a s S a t z - input(Type,Input), zeichen als K o d i e r u n g d e s T y p s d e r E i n g a b e ; e i n e F r a g e nl, i m m e r mit einem Fragezeichen, eine A u s s a g e m i t e i n e m process(Type,Input,Output), W i r b e e n d e n i n p u t m i t e i n e m cut, Output(Output), allen a n d e r e n E i n - u n d A u s g a b e p r ä d i k a t e n , u m ein d e t e r m i n i s t i - nl, sches P r ä d i k a t dialog. dialog d a es sich g a n z k l a r , w i e bei handelt. input(Typ e,Input) :- endet Punkt. :- read_sentence(ListOfStrings), write(ade), convert(ListOfAtoms.ListOfStrings), nl. delete.last(Type,ListOfAtoms,Input), I Mit dialog w i r d e i n e Schleife r e a l i s i e r t , in der zunächst S a t z eingelesen wird ( i n p u t ) ; dabei wird gleich festgestellt, ein ob e i n e A u s s a g e o d e r F r a g e vorliegt. D i e s e E i n g a b e w i r d v e r a r b e i t e t Bei d e r V e r a r b e i t u n g d e r E i n g a b e s i n d z u n ä c h s t d r e i F ä l l e z u u n terscheiden: KAPITEL 168 12. EIN KLEINES DIALOGSYSTEM 169 der Datenbasis ab. D a m i t steht die Information s p ä t e r z u m B e - 1 . E n d e des Dialogs antworten von Fragen zur Verfügung. 2 . B e a r b e i t u n g einer A u s s a g e D i e d r i t t e K l a u s e l dient d a z u , bei e i n e m n i c h t - a n a l y s i e r b a r e n 3 . B e a r b e i t u n g einer F r a g e S a t z d e m B e n u t z e r dieses U n v e r s t ä n d n i s k u n d z u t u n . Z u r V e r a r b e i t u n g v o n A u s s a g e n u n d A n f r a g e n m ü s s e n w i r diese Die vierte Klausel analysiert eine eingegebene F r a g e m i t d e m - z u n ä c h s t syntaktisch analysieren u n d eine s e m a n t i s c h e R e p r ä s e n - selben P a r s e r wie bei A u s s a g e n . D i e S e m a n t i k e r h ä l t m a n w i e d e r t a t i o n a u f b a u e n . D a z u v e r w e n d e n w i r d e n i m K a p i t e l 1 0 entwickel- als P R O L O G - F o r m e l . D i e s e w i r d a n d a s P r ä d i k a t p r o v e g e g e b e n , t e n P a r s e r , d e r gleichzeitig m i t d e r A n a l y s e e i n e l o g i s c h e F o r m e l das e i n e n B e w e i s f ü r diese F o r m e l s u c h t . D i e fünfte K l a u s e l ist w i e d e r f ü r n i c h t - a n a l y s i e r b a r e E i n g a b e n in P R O L O G - N o t a t i o n f ü r d e n E i n g a b e s a t z e r z e u g t . D a s d r i t t e A r g u m e n t v o n p r o c e s s ist d a s E r g e b n i s d e r V e r a r b e i t u n g . W i r g e h e n d a b e i v o n e i n e r L i s t e v o n A t o m e n a u s , d a bei '/. E n d e !, '/, B e i d e r B e a n t w o r t u n g v o n F r a g e n s i n d zwei F ä l l e z u u n t e r scheiden: F r a g e n j a auch mehrere Antworten möglich sind. process('.',[ade],_) vorgesehen. :- fail. Aussage 1. Ja-Nein-Fragen 2. Ergänzungsfragen Diese F ä l l e sind leicht a u s e i n a n d e r z u h a l t e n , w e n n w i r u n s n o c h process('.',In,[ok]) :- e i n m a l d a s E r g e b n i s d e r S e m a n t i k k o n s t r u k t i o n für diese b e i d e n s(Sem,In, []) , Fragetypen ansehen: assert(Sem), ! . 7, A u s s a g e n i c h t process ?- analysierbar s(Sem,[ist,sokrates,sterblich],[]). Sem = ('.'.In,[wie,'bitte?']). ?- (term(sterblich(sokrates)):-true) s(Sem,[wer,ist.sterblich],[]). Sem = (term(sterblich(_067D)):-true) 7. F r a g e process('?',In,Out) :- In b e i d e n F ä l l e n e r h a l t e n w i r ein F a k t , d . h . d e r R u m p f e n t h ä l t n u r s ( S e m , I n , [] ) , das A t o m t r u e . B e i e i n e r J a - N e i n - F r a g e e n t h ä l t d e r K o p f k e i n e prove(Sem,Out), V a r i a b l e , bei e i n e r E r g ä n z u n g s f r a g e w i r d d a s , w o n a c h g e f r a g t i s t , ! , d u r c h eine V a r i a b l e a u s g e d r ü c k t . 1 7. F r a g e n i c h t analysierbar W i r v e r w e n d e n d e s h a l b l i s t v a r , u m e i n e L i s t e aller V a r i a b l e n processC?' ,In, [wie,'bitte?'] ) . im K o p f zu e r h a l t e n . Ist diese L i s t e l e e r , h a n d e l t es sich u m e i n e D a s E n d e des D i a l o g s wird d u r c h d i e E i n g a b e a d e a u s g e l ö s t . Die e r s t e K l a u s e l p r ü f t diesen F a l l a b u n d e r z e u g t g e g e b e n e n f a l l s ein fail. Die zweite Klausel analysiert die Eingabe, eine Aussage, ( s ( S e m , I n , [ ] ) ) u n d s p e i c h e r t die S e m a n t i k Sem m i t a s s e r t in Ja-Nein-Frage. 'Dies ist übrigens kein Programmiertrick, sondern durchaus auch linguistisch motivierbar. Ergänzungsfragen sind eben gerade so gebaut, daß nach einem unbekannten Argument im Satz gefragt wird und das wird in der Semantik durch eine Variable ausgedrückt. KAPITEL 170 12. EIN KLEINES DIALOGSYSTEM D i e B e a n t w o r t u n g einer F r a g e ist n u n g a n z e i n f a c h . B e i 171 Ja- L i s t e v o n A t o m e n jeweils g e t r e n n t d u r c h ein L e e r z e i c h e n a u s g i b t : N e i n - F r a g e n v e r s u c h e n w i r einen B e w e i s d e r F o r m e l , d i e d i e A n f r a g e r e p r ä s e n t i e r t . Dies geschieht d u r c h c a l l ( H e a d ) . output([OnlyOne]) Falls der B e w e i s gelingt, lautet die Antwort j a . A n d i e s e r S t e l l e z a h l t es sich a u s , d a ß w i r a l s semantische Repräsentation der Eingabe P R O L O G - F o r m e l n gewählt S o k ö n n e n wir die g e s a m t e Lösungssuche d e m PROLOG-Inter- :- write(OnlyOne), Output([First IRest]) haben. :- write(First), writeC p r e t e r ü b e r l a s s e n u n d b r a u c h e n u n s d a r ü b e r n i c h t d e n K o p f zu ' ) , output(Rest) . zerbrechen. B e i einer Ergänzungsfrage könnten wir ebenfalls D a m i t ist die R e a l i s i e r u n g u n s e r e s k l e i n e n D i a l o g s y s t e m s call(Head) b e n u t z e n u n d a l s E r g e b n i s die I n s t a n t i i e r u n g d e r V a r i a b l e n higes P r o d u k t g e s c h a f f e n . F ü r ein r e a l i s t i s c h e s D i a l o g s y s t e m w ä r e H e a d , d i e w i r m i t l i s t v a r b e s t i m m t h a b e n , z u r ü c k g e b e n . D a wir viel m e h r A r b e i t n ö t i g . E s m ü ß t e v o r a l l e m i n d e n f o l g e n d e n B e - a b e r alle m ö g l i c h e n I n s t a n t i i e r u n g e n a l s E r g e b n i s e r h a l t e n m ö c h - r e i c h e n s e h r viel g e t a n w e r d e n : t e n , w u r d e b a g o f v e r w e n d e t . Die A n t w o r t ist s o m i t d i e L i s t e aller möglichen Lösungen. 1. M a n b e n ö t i g t ein u m f a n g r e i c h e s s y n t a k t i s c h e s F r a g m e n t d e r Falls eine F r a g e nicht beweisbar ist, s c h e i t e r t d a s Unterbeweis- Sprache u n d die zugehörigen S e m a n t i k k o n s t r u k t i o n s r e g e l n ziel c a l l b z w . b a g o f . D a m i t s c h e i t e r t a u c h d i e j e w e i l i g e K l a u s e l v o n p r o v e . In d i e s e m F a l l e e r h a l t e n w i r d u r c h d i e d r i t t e K l a u s e l 2. D i e I n t e r a k t i o n m i t d e r W i s s e n s b a s i s m u ß s e h r viel a u s geklügelter sein die Antwort n e i n . '/, A n t w o r t '/, 3 . V e r n ü n f t i g e D i a l o g e sind n i c h t o h n e u n d Dialogplanung möglich erzeugen Ja-Wein-Frage p r o v e (Sem, [ j a ] ) Sem = 5. listvar(Head,ListOfVars), = [] , W a s a b e r bei u n s e r e m M i n i m a l s y s t e m d e u t l i c h w u r d e , ist, d a ß Ergaenzungsf rage prove(Sem,Result) Sem = m a n in P R O L O G m i t s e h r wenig A u f w a n d s c h o n ein f u n k t i o n i e - :- rendes S y s t e m , e i n e n Prototyp, (Head:-true), aufbauen kann. P R O L O G erlaubt schnelles U m s e t z e n v o n I d e e n , d i e a u f l o g i s c h e r E b e n e b e r e i t s for- listvar(Head,ListOfVars), muliert sind o d e r leicht f o r m u l i e r b a r s i n d , i n e i n l a u f f ä h i g e s P r o - ListOfVars gramm. D u r c h Verbesserung einzelner K o m p o n e n t e n kann d a n n = [Var] , bagof(Var,call(Head),Result). % ... Die L i s t e ließe sich w a h r s c h e i n l i c h beliebig f o r t s e t z e n . call(Head) . '/, Benutzermodellierung 4 . W i r b r a u c h e n eine „ r i c h t i g e " G e n e r i e r u n g (Head:-true), ListOfVars abge- schlossen. N a t ü r l i c h h a b e n w i r d a m i t kein i n d e r P r a x i s e i n s a t z f ä - in keine Antwort gefunden, also die L e i s t u n g s f ä h i g k e i t n a c h u n d n a c h e r h ö h t w e r d e n . M a n s p r i c h t "nein" sagen v , prove(Sem,[nein]). deshalb oft v o n rapid prototyping. Diese E i g e n s c h a f t ist eine der großen S t ä r k e n v o n P R O L O G , d i e z u r r a s c h e n V e r b r e i t u n g dieser A l s l e t z t e T e i l a u f g a b e bleibt n u r n o c h die A u s g a b e d e r E r g e b n i s s e P r o g r a m m i e r s p r a c h e a u c h ü b e r d e n U n i v e r s i t ä t s b e r e i c h h i n a u s in ü b r i g . D a z u s c h r e i b e n w i r d a s P r ä d i k a t O u t p u t , d a s einfach den E n t w i c k l u n g s l a b o r s d e r I n d u s t r i e g e f ü h r t h a t . e i n *».; Anhang A Lösungen Für die meisten Übungen finden Sie hier Lösungsvorschläge. In der Regel ist die angegebene Lösung nicht die einzig mögliche, oft auch nicht die bestmögliche. W i r möchten hier lediglich Vorschläge machen, die weiterhelfen, wenn Sie beim Bearbeiten der Übungen mal nicht weiterkommen oder unsicher sind. 174 ANHANG A. 175 LOSUNGEN Einführung 1.2 • die Verschachtelung von Strukturen sollte die hierarchische Beziehung zwischen diesen Strukturen widerspiegeln. W i r wählen wieder „sprechende" Prädikatsnamen, um die inten- dierte Bedeutung eines Prädikats schon beim Lesen seiner Definition nahezulegen: '/, L o r e und Gerd s i n d 1. verheiratet(annette,Johann). 2. enthaelt(ottos-schreibtisch, Schreibmaterial(anzahl(Kugelschreiber, verheiratet 5), verheiratet(lore.gerd). anzahl(blaetter, verheiratet(gerd.lora). 57)), sonstiges(anzahl(Zeitschrift enartikel, '/. X i s t G r o s s v a t e r von Y grossvater(X.Y) 8), :- anzahl(flaschenoeffner, vater(X.Z), 1))). vater(Z,Y). 7, auch d e r V a t e r d e r M u t t e r i s t grossvater(X.Y) ein Grossvater 3. kategorien(verben(einstellige.verben, :- zweistellige-verben, vater(X.Z), dreistellige-verben, mutter(Z.Y). vierstellige.verben), nomen, 7, wer wen l i e b t adj ekt ive (praenominale.ad j ekt i v e , liebt(lore,gerd). praedikative.adjektive), liebt(gerd,lore). praepositionen, liebt(gitte.fido). artikel, adverben, Partikel). Strukturen 2.1 1. Fido Variable 2. nummer-24 Atom, und damit auch a t o m a r 3. hallo.jungs 4. h a l l o (Jungs) Atom, und damit auch a t o m a r komplexer Term 5. Jungs Variable 6. X Atom, und damit auch a t o m a r 7. Y Variable 2.2 Unifikation 3.1 1. 2. ?no 4. turen zueinander in Beziehung setzen, ? - X = Y. yes 3. volle Darstellungen sind: • „einleuchtende" Wahl der Prädikate und Funktoren, die Teilstruk- . = X. X = Y Folgende Lösungen sind nur Vorschläge. Es gibt, wie immer sehr viele Möglichkeiten, die Dinge darzustellen. Gewisse Kriterien für sinn- ?- yes. ?- a(X,Y,Z) = a(q,U). '/, v e r s c h i e d e n e S t e l l i g k e l t e n f u e r a(X,Y,Z) X =W Y = P = a(W,P,t). a ANHANG 176 z A. LOSUNGEN = t Beweisverfahren yes ?- a(b(C)) no A X Y 8. 4.2 = b(a(C)). % Funktoren ?- 177 verschieden obst(X) :- pflanze(Y), fl(f2(f3,f4),f5(f6,X,Y),g) fl(A,f5(B,f7,f8),H). frucht.von(Y,X) , = f2(f3,f4) = f7 = f8 essbar(X). pflanze(apfelbaum). pflanze(kaktus). H = g yes pflanze(himbeerstrauch). ? - X = X. pflanze(hundsrose). yes frucht.von(apfelbaum,apfel). ?- f(X) pflanze(stachelbeerstrauch). frucht-vonCkaktus,feige). = X. Diese beiden Terme sind nicht unifizierbar. Die meisten han- frucht.vonChimbeerstrauch.himbeere) . delsüblichen P R O L O G - S y s t e m e kommen jedoch mit dieser Art frucht-von(Stachelbeerstrauch,Stachelbeere) . von Anfrage nicht zurecht, sondern geraten in eine „unendliche" frucht.von(hundsrose,hagebutte) . Schleife, weil sie aus Effizienzgründen auf den occur check verzich- essbar(apfel). ten. Das heißt, es wird nicht überprüft, ob eine Variable im lin- essbar(feige). ken und rechten Term auf verschiedenen Einbettungsebenen vor- essbar(himbeere). kommt. Die Konsequenz ist, daß „sich die K a t z e in den Schwanz essbar(Stachelbeere). beißt" und versucht wird, eine in sich selbst eingebettete („zir4.3 kuläre") Struktur aufzubauen. huhn(X) :- ei(Y). ei(X) :- huhn(Y). Beide möglichen Anfragen führen in eine unendliche 9. ?- fl(f2(f3,f4),f5(f6,X,Y),g) no 10. 11. 12. X verschiedene S t e l l i g k e i t e n f ü r ?- a = a(X,Y). no Ä Atom und komplexer Term n i c h t ?- a = a. Schleife: = f l ( A , f 5 ( B , f 7 ) ,H) . f5 unifizierbar ?- huhn(Welches). ?- ei(Welches). Rekursion yes 5.2 Eine mögliche Lösung: ? - qwertz = qwerty. no X zwei v e r s c h i e d e n e Atome gruppe(mitarbeiterinnen(Johanna,emilie ,sof i a ) ) . gruppe(mitarbeiterinnen(helena,Ott i l i e , 178 ANHANG A. 179 LÖSUNGEN josephine,Jacqueline)). delete(Element,AlteListe,NeueListe). l gruppe(mitarbeiterinnen(evelin,hermine)). X chefin(verena). chefin(magdalena). X - chef in(manuela) . I X X X - chefin(caroline). firma(hierarchie(Chefin,Hitarbeiterinnen)):chefin(Chefin), I n e i n e r l e e r e n L i s t e i s t n i c h t s zu Element, delete(_, [ ] , [ ] ) . gruppe(Mitarbeiterinnen). delete(Element,[Element IRest],Rest). delete(Element,[ElementII Rest],[Elementl|NeuerRest]):- firma(hierarchie(Chefin,Hierarchiel,Hierarchie2)):chefin(Chefin), X h i e r m u e s s t e e i g e n t l i c h noch ausgeschlossen firma(Hierarchiel), X werden, d a s s Element = Elementl firma(Hierarchie2). delete(Element,Rest,NeuerRest). 5.4 loeschen. I s t das e r s t e Listenelement das passende loesche es - P a s s t das e r s t e Element n i c h t , l o e s c h e d a s E l e m e n t aus d e r R e s t l i s t e Läßt man zu, Wege in beiden Richtungen zu durchlaufen, ist 6.3 Das Prädikat r e p l a c e ist wiederum eine Erweiterung von d e l e t e es natürlich möglich, im Kreis zu gehen. U m solche Zyklen zu ver- um ein viertes Argument, nämlich das Element, das s t a t t des gelöschten meiden, müßte das Prädikat so erweitert werden, daß es nachprüft, Elements eingesetzt wird. ob eine „neue" Station auf dem Weg zum Ziel nicht bereits im schon zurückgelegten Weg enthalten ist und diesen Pfad dann ausschließt. X D a für die eigentliche P R O L O G - L ö s u n g dieses Problems P R O L O G - X Sprachkonstrukte benötigt werden, die erst später eingeführt werden, X wird hier auf die Lösung der Übungsaufgabe 11.4 verwiesen. X - I n e i n e r l e e r e n L i s t e i s t n i c h t s zu X - Ist X 5.5 X term(argvunent) . X term(functor(Argument)) :- replace(AltesElement.NeuesElement, AlteListe.NeueListe). das e r s t e Listenelement Element, ersetze ersetzen. das p a s s e n d e es. - P a s s t das e r s t e Element n i c h t , e n t s p r e c h e n d e E l e m e n t aus d e r ersetze das Restliste replace^,., [ ] , [ ] ) . replace(Element.NeuesElement, term(Argument). [Element I R e s t ] , [ N e u e s E l e m e n t I R e s t ] ) . Listen replace(Element.NeuesElement, [ElementlIRest], [ElementlINeuerRest]) 6.1 X h i e r m u e s s t e e i g e n t l i c h noch X werden, d a s s Element = E l e m e n t l ersetze4(NeuesViertesElement, replace(Element.NeuesElement,Rest.NeuerRest). [Erstes.Zweites.Drittes,. IRest], 6.4 [ E r s t e s . Z w e i t e s . D r i t t e s .NeuesViertesElement IRest]). 6.2 Arbeitet analog dem Prädikat e l e m e n t , :- ausgeschlossen Das Prädikat f ahndung macht nichts anderes, als sich den Daten- satz zu einer Person zu holen und zu testen, ob das gewünschte Merkmal in diesem Datensatz vorhanden ist. allerdings mit einer ' zusätzlichen Abbruchbedingung, nämlich für die leere Liste. **" fahndung(Merkmal,Datensatz) :- ANHANG 180 A. LÖSUNGEN 181 person(Datensatz), element(Merkmal,Datensatz). (f) Geldstücke 2. Abbildungen 6.5 X y. reverse(Liste,Etsil). - Eine l e e r e L i s t e i s t Spiegelbild i h r e r '/, - Bei einer nicht leeren Die Abbildungen zwischen den verschiedenen Objekten sind bereits in der Aufgabenstellung definiert. selbst Realisierung: Liste: 1. Darstellung der Objekte in P R O L O G '/, d r e h e i h r e R e s t l i s t e um, h a e n g e '/. d a s e r s t e Element an d i e u m g e d r e h t e reverse([ ] , [ ] ) . r a v e r s a ( [Erstes I Rest].UmgedrehteListe) reverse(Rest,UmgedrehterRest), Restliste :- (a) zauberstab(StabFarbe,GriffFarbe.Spitze) (b) drei-rote.tuecher (c) hase(Farbe,OhrenFarbe,AugenFarbe) (d) mit ( F a r b e ) append(UmgedrehterRest, [ E r s t e s ] . U m g e d r e h t e L i s t e ) . Programmiertechnik (e) muetze(Farbe) (f) geldstuecke 2. Die Beziehungen in P R O L O G formuliert: 7.1 Z a u b e r e r ( O b j ekt,VerzaubertesObj e k t ) : - permute(Liste, [ErstesElement|Rest]):- Zauberer1(Objekt.VerzaubertesObjekt) . append(Listel,[ErstesElement|Liste2].Liste) , Zauberer(Objekt,VerzaubertesObjekt):- append(Listel,Liste2,Liste3), zauberer2(0bjekt,VerzaubertesObjekt) . permute(Liste3,Rest). p e r m u t e ( • , • ) . / * Abbruchbedingung Zauberer(Objekt.VerzaubertesObjekt):- */ zauberer3(Objekt.VerzaubertesObjekt) . append(D . L i s t e , L i s t e ) . append([ErstesElementIRest] , zaubererl(zauberstab(gelb,_,.), Liste, drei-rote_tuecher) . [ErstesElementiListel]):- zauberer2(hase(schwarz,weiss,blau), append(Rest,Liste,Listel). hase(weiss,weiss,rot)). 7.2 Konzeptioneller Entwurf. zauberer2(hase(braun,_,-)).VerzaubertesObjekt):zauberer3(hut(blau).VerzaubertesObjekt) . 1. Welche Objekte treten auf? zauberer3(muetze(gelb),hut(schwarz)) . zauberer3(muetze(gelb),geldstuecke). ( a ) Zauberstäbe: gelbe Zauberstäbe, grüne Zauberstäbe mit zauberer3(hut(blau), schwarzem Griff und weißer Spitze zauberstab(gruen,schwarz,weiss)). ( b ) Mengen von roten Tüchern ( c ) Hasen: Hasen mit weißen Ohren und blauen Augen, weiße Hasen mit weißen Ohren und ( d ) Hüte: blaue und schwarze ( e ) Mützen, gelbe Toten 7.3 Konzeptioneller Entwurf Augen, braune Hasen 1. Klassen von Objekten: ( a ) Nomina: k a t z e , maus 182 ANHANG A. 183 LOSUNGEN ( b ) Artikel: d i e , e i n e r Deflnite Clause Grammars ( c ) Präposition: n a c h 9.1 ( d ) Verb: s u c h t schen Subjekt-NP und V P gesorgt werden und für die Übereinstimmung 2. Verbindungen zwischen Objekten: ( a ) Ein Nomen bildet für sich schon eine Einheit. ( b ) Ein Artikel benötigt rechts von sich ein Nomen, um eine von Numerus zwischen D E T und N beim Aufbau einer NP. W i r verwenden einen Term a g r (NUH, PER), dessen erstes Argument für die Kodierung der Numerusinformation und das zweite für die Person verwendet wird. Nominalphrase darzustellen. s np(AGR) — > n(AGR). phrase, um eine Präpositionalphrase zu bilden. vp(AGR) — > v(AGR), n p ( _ ) . ( d ) Ein Verb wie sucht benötigt rechts von sich eine Präpositio- vp(AGR) — > v(AGR). nalphrase und links von sich eine Nominalphrase, um einen Satz zu bilden. — > [mary] . — > [woman] . n(agr(sg,3)) Realisierung n(agr(sg,3)) Objekte W ö r t e r sind A t o m e . Phrasen sind Listen von W ö r t e r n . Wort- oder n(agr(pl,3)) — > [women]. n(agr(sg,D) —> [ i ] . —> [ y o u ] . n(agr(sg,2)) Phrasenklassen werden durch Prädikate dargestellt. 2. Die — > np(AGR), vp(AGR) np(AGR) — > d e t ( A G R ) , n(AGR) ( c ) Eine Präposition benötigt rechts von sich eine Nominal- 1. Die Es muß für die Übereinstimmung von Person und Numerus zwi- 7. ... Verbindungen det(agr(_,3)) --> [the] . n(katze). n(maus). det(agr(sg,3)) —> [ a n ] . np([Artikel,Nomen]):- v(agr(sg,3)) --> [loves] . --> [love] . v(agr(sg,l)) artikel(Artikel), —> [ l o v e ] . --> [love] . v(agr(sg,2)) n(Nomen). v(agr(pl,J) pp( [ P r a e p o s i t i o n l N P h r a s e ] ) : artikel(Artikel), np(NPhrase). 9.2 artikel(die) . ben vorsehen und darüber hinaus Fälle, in denen beides möglich ist. 7. ... W i r wollen die Möglichkeit von transitiven und intransitiven Ver- artikel(einer). Dazu erweitern wir die Verbeinträge der D C G aus Übung 9.1 um ein s(Satz):- weiteres Argument. np(NPhrase), verb(Verb), pp(PPhrase), appand(NPhrase,[VerblPPhrase] . S a t z ) . verb(sucht). vp(AGR) — > v ( A G R . t r a n s ) , vp(AGR) — > np(_). v(AGR,intrans). v(agr(sg,3).intrans) —> [sleeps] . v(agr(sg,l),intrans) —> [sleep] . 184 ANHANG —> v ( a g r ( p l , _ ) , i n t r a n s ) —> v(agr(sg,3),trans) —> —> v(agr(sg,l),trans) —> v(agr(sg,2),trans) —> v(agr(pl,_),trans) --> v(agr(sg,3),_) v(agr(sg,l),_) —> —> v(agr(sg,2),_) v(agr(pl,_),_) —> v(agr(sg,2).intrans) 9.3 A. LÖSUNGEN [sleep] [sleep] [likes] 185 k Eingebaute 11.1 [like] . pp.list(D). [like] . pp.list([FirstIRest]) [like] . write(First), [sings] nl, pp.li3t(Rest). [sing] . 11.2 pp_list(List) :- pp.list(O.List). Erkennen einer Folge von a und b genau diese Folge in einer Liste aufzusammeln. Die zweite Folge muß dann einfach identisch sein. s —> :- [sing] . [sing]. Die D C G für diese Sprache verwendet ein A r g u m e n t dafür, beim s —> a b ( X ) , c , Prädikate pp_list(Tab, • ) . pp.list(Tab, [First 1Rest]) ab(X). :- pp_elem(Tab,First), c. pp.list(Tab,Rest). ab([X]) --> ab([X]) —> b ( X ) . a(X). pp_elem(Tab,[First 1 Rest]) ab([X|Y]) --> a(X), ab(Y). ab([X|Y]) —> b ( X ) , ab(Y). a(a) --> [a] . b(b) —> [b]. c --> [c]. :- NewTab i s Tab + 3 , pp.list(NewTab,[First IR e s t ] ) . pp.elem(Tab.X) :- tab(Tab), write(X), nl. 11.3 Deutsch statt PROLOG reverse(List.Tsil) 7. reverse(G .Tsil.Tsil). Entscheidungsfrage s(SStruktur) :- reverse(List, • ,Tsil). 10.2 reverse([FirstIRest],In,Out) —> :- r e v e r s e ( R e s t , LFirst I In] , 0 u t ) . kopula, np(NPStruktur), 11.4 Läßt man zu, Wege in beiden Richtungen zu durchlaufen, ist es praedikatsnomen(PraedNStruktur), natürlich möglich, im Kreis zu gehen. U m solche Zyklen zu vermeiden, { k o n s t r u i e r e - s (NPStrukur, P r a e d N S t r u k t u r , S S t r u k t u r ) } . muß das Prädikat so erweitert werden, daß es nachprüft, ob eine „neue" 7. '«er» eigenname((term(-,_) : - t r u e ) ) Station auf dem Weg zum Ziel nicht bereits im schon zurückgelegten Weg —> [wer]. enthalten ist und diesen Pfad dann ausschließt. Dazu m u ß w e g s u c h e um ANHANG 186 A. LÖSUNGEN ein A r g u m e n t erweitert werden, auf welchem die Information über den eliminate.empty(ListOfWords,Sentence) , zurückgelegten Weg aufgesammelt wird. So eine Argumentstelle wird auch Akkumulator genannt. Der Gesamtweg wird jetzt in der verkehrten Reihenfolge angegeben. Aufgerufen wird das Prädikat zum Beispiel so: ?- wegsuche(bahnhof,uni.bahnhof,Weg). read_wordlist(punctuation(Word),[WordlRestOfWordList]) skip(Char), Beispiellösung: '/. Am Z i e l p u n k t i s t d e r z u r u e c k g e l e g t e Weg g l e i c h dem Gesamtweg wegsuche(Punkt,Punkt,Weg,Weg). '/. read_wordlist(end_of.sentence(Word), [Word]). Rekursiver :- weg(Anfangspunkt.NaechsterPunkt), not(liegt.auf(NaechsterPunkt,GegangenerWeg)), wegsuche(NaechsterPunkt, GesamtWeg). '/. e i n Punkt l i e g t Char i s " :- ", read_word(Char, • ,end_of.sentence(Word)) weg(NaechsterPunkt.GegangenerWeg), prueft, read_word(Char, • .NextChar) skip(NextChar). Endpunkt, '/. read_word(Char, • ,punctuation(Word)) :- punctuation(Char.Word). ob e i n Punkt auf dem Weg l i e g t : Der Punkt l i e g t auf s i c h selbst t a t s ä c h l i c h auf dem Weg liegt.auf(Punkt,weg(Punkt,.)). '/. Der Punkt l i e g t v i e l l e i c h t noch a u f dem RestWeg l i e g t . a u f (Punkt,weg(-.RestWeg)) :- liegt.auf(Punkt,RestWeg). 11.5 :- end.of_sentence(Char,Word). read_word(Char,[Char|RestOfWord].FirstCharOfNextWord) getO(NextChar), read.word(NextChar,RestOfWord,FirstCharOfNextWord) . liegt.auf(Punkt.Punkt). '/. : - read.wordlist(FirstCharOfNextWord,RestOfWordList) . Schritt l i e g t . a u f (Punkt,Weg) read.wordlist(Char,[FirstWordIRestOfWordList]) read_word(Char,FirstWord,FirstCharOfNextWord), wegsuche(Anfangspunkt ,Endpunkt ,GegangenerWeg ,GesamtWeg) '/. read.wordlist(Char.RestOfWordList). W i r definieren zunächst ein Prädikat s k i p , das beliebig viele Leerzeichen überliest bis ein anderes Zeichen gefunden wird. Dieses wird dann abgeliefert. Wenn wir dann getO durch s k i p ersetzen, haben wir bereits fast alles geschafft. Das einzige Problem besteht da- skip(Char) :- Space i s " ", repeat, getO(Char), Char \= S p a c e . end.of.sentence(Char,".") :- Char end.of_sentence(Char,"?") :- Char i s "?". end.of_sentence(Char,"!") :- Char i s "!". punctuation(Char,",") : - Char is Fall erhalten wir „leere" W ö r t e r ( [ ] ) . W i r schreiben uns ein Prädikat punctuation(Char,";") : - Char is e l i m i n a t e . e m p t y , das solche leeren W ö r t e r wieder entfernt. Insgesamt punctuation(Char,":") : - Char is erhalten wir folgendes P r o g r a m m : punctuation(Char,"-") : - Char is read.sentence(Sentence) e l i m i n a t e . e m p t y ( • , [] ) . rin, daß auch vor Satzzeichen Leerzeichen auftreten können. In diesem :- skip(Char), read.wordlist(Char.ListOfWords), e l i m i n a t e _ e m p t y ( [ [ ] 1R] ,RR) :- is 188 ANHANG A. LÖSUNGEN eliminate_empty(R,RR). e l i m i n a t e . e m p t y ( [ F I R ] , [FI RR] ) : - F \- • . eliminate_empty(R,RR). Anhang B Glossar Die Begriffe werden nicht unbedingt in ihrer allgemeinen Bedeutung erklärt, sondern in Bezug auf ihre Verwendung im P R O L O G - J a r g o n . anonyme Variable Variable, deren Name und Wert keine Rolle spie- len; geschrieben als Unterstrich Argument Substruktur auf erster Einbettungstiefe in einem P r ä d i k a t . In v a t e r ( g e r d , g i t t e ) sind die Argumente g e r d und g i t t e Atom nicht weiter zerlegbare Struktur; z . B . g e r d , g i t t e atomare Struktur Aufruf A t o m e und Zahlen der Versuch, eine Zielklausel aus einer Menge von P r o g r a m m - klauseln zu beweisen Aussage Beschreibung eines Sachverhaltes, der wahr oder falsch ist; z . B . „Sokrates ist sterblich" Axiom Aussage, die als wahr vorausgesetzt wird Backtracking Zurücksetzen (des Beweisganges) an den letzten Ver- zweigungspunkt, um eine weitere Alternative zu versuchen # Beweis (wiederholte) Verknüpfung von Programmklauseln nach dem Schema einer logischen Schlußregel, um die Gültigkeit einer Zielklausel zu zeigen Compiler P r o g r a m m , das andere P r o g r a m m e in eine „niedrigere" Programmiersprache übersetzt, damit sie effizienter ausgeführt werden können Datenbasis siehe Wissensbasis 190 ANHANG DCG B. GLOSSAR 191 Definite Clause G r a m m a r debugging mit Funktor k r e u z t und den Argumenten f r i e d r i c h s t r Suchen und Entfernen von Fehlern aus einem P r o g r a m m definite Klausel siehe Programmklausel Definite Clause G r a m m a r Konjunktion sers für diese Grammatik übersetzt wird Dialekt Variante einer Programmiersprache. Verschiedene P R O L O G - Dialekte unterscheiden sich vor allem bezüglich Notation und A r t , Konklusion Kopf Verknüpfung zweier Aussagen mit „oder"; die Disjunk- Fakt „Logical Inferences Per Second"; ein Maß für die Geschwindigkeit von Beweisen in verschiedenen P R O L O G - S y s t e m e n Literal negiertes oder nicht-negiertes Prädikat; ein nicht-negiertes Li- teral heißt positiv, ein negiertes tion „A oder B " ist falsch, wenn A und B falsch sind; in P R O L O G fail Kopf einer Regel positives Literal LIPS Name und/oder Bedeutung der eingebauten Prädikate Disjunktion logische Verknüpfung von Formeln mit „ u n d " ; die Kon- junktion „A und B " ist wahr, wenn A und B wahr sind Kodierung einer G r a m m a t i k , die von P R O L O G direkt in eine Menge von Programmklauseln eines Par- nur durch Angabe zweier Klauseln möglich match 1. Scheitern eines (Teil-)Beweises 2. eingebautes P r ä d i k a t , das immer scheitert Modus Ponens Klausel, die nur aus dem Kopf besteht, also eine Aussage, die bedingungslos gültig ist Funktor siehe Unifikation Schlußregel, die es erlaubt ein F a k t und die Bedin- der Regel als bewiesen abzuleiten Negation die Negation „nicht A " einer Aussage A gilt, wenn A nicht gilt; in P R O L O G nur eingeschränkt möglich Hornklausel Konjunktion von Literalen, die höchstens ein positives Literal enthält Implikation Umsetzung eines Problemlöseverfahrens in ein Verknüpfung zweier Aussagen mit „wenn, d a n n " ; die Im- Parameter siehe Argument Prädikat(sdefinition) Prämisse Rumpf einer Regel plikation „wenn A, dann B " ist falsch, wenn A wahr und B falsch ist; Implikationen werden bei der Anwendung von Schlußregeln Programmklausel benutzt; in P R O L O G wird Implikation „rückwärts" geschrieben: B :- A Instantiierung Unifikation einer Variablen mit einem Term; dadurch erhält die Variable einen „ W e r t " zugeordnet Interpreter P r o g r a m m , das andere P r o g r a m m e ausführt, ohne sie zu- Prozedur Regel Klausel, die aus einem Kopf und einem R u m p f , der nicht t r u e ist, besteht gensatz zu Compiler) Rekursion komplexer Term ist kreuzt(friedrichstr,kronenstr) ein zweistelliger Beziehung zwischen Strukturen Resolution mindestens zweistufige hierarchische S t r u k t u r , z . B . Term für P R O L O G gleichbedeutend mit Beweis manchmal s t a t t Prädikatsdefinition verwendet Relation Konjunktion von Literalen; ein Fakt oder eine Regel Konjunktion von Literalen, die genau ein positi- ves Literal enthalten, auch Regeln und Fakten genannt vor in eine „niedrigere" Programmiersprache zu übersetzen (GeKlausel eine Menge von Programmklauseln Programmlauf einzelner Beweisschritt; Anwendung einer Schlußregel Bündel von Programmklauseln, deren Köpfe hinsichtlich Prädikatsname und Steifigkeit übereinstimmen Programm Inferenz negativ gung im Rumpf einer Regel zu verknüpfen und daraus den K o p f der Name einer Struktur; siehe auch komplexer T e r m Implementierung Programm und kronenstr siehe Rekursion syntaktische Schlußregel dia auf dem „Modus P o n e n s " basiert; wird von der PROLOG-Inferenzmaschine verwendet Rumpf Liste von negativen Literalen; Bedingungen; Voraussetzungen 192 ANHANG Schlußregel B. GLOSSAR Vorschrift, wie aus einem oder mehreren gültigen Aus- sagen weitere gültige Aussagen abgeleitet werden dürfen; oft auch Schlußschema Steifigkeit genannt Zahl der Argumente Struktur siehe Term Suchraum Ein P R O L O G - P r o g r a m m spannt einen Suchraum auf durch die Hierarchie oder das Netz von Alternativen, die durch Literaturverzeichnis die Klauseln in einem Prädikat vorgegeben sind System meist: größere Anzahl von zusammenarbeitenden Program- men. Ein P R O L O G - S y s t e m besteht zum Beispiel mindestens aus einem Interpreter und einer Menge von Systemprädikaten Systemprädikat „eingebaute" Prädikate; P r ä d i k a t e , die dem Benut- zer vom P R O L O G - S y s t e m zur Verfügung gestellt werden Term grundlegende Datenstruktur in P R O L O G ; es gibt drei Arten von Termen: Atomare Terme, Variablen und komplexe Terme. trace Protokoll des Programmlaufs. Unifikation Variable Identisch-Machen von Termen Platzhalter für beliebige Struktur Verzweigungspunkt Stelle in einem Suchraum, an dem eine E n t - scheidung zwischen mehreren Alternativen zur Weitersuche nötig ist Wissensbasis Zielklausel Menge der Programmklauseln negatives Literal, das also nicht unter die Menge der P r o - grammklauseln fällt [Belli 1986] Belli, F. ( 1 9 8 6 ) : Einführung in die logische Programmierung mit P R O L O G . Bibliographisches Institut, Mannheim. [Bonevac 1987] Bonevac, D. ( 1 9 8 7 ) : Deduction. Introductory Symbolic Logic. Mayfield Publishing Company, P a l o Alto, California. [Bratko 1987] Bratko, I. ( 1 9 8 7 ) : P R O L O G . Programmierung für künstliche Intelligenz. Addison-Wesley, Bonn. [Clark/McCabe 1987] Clark, K . L . und F . G . M c C a b e ( 1 9 8 7 ) : MicroP R O L O G . Logische Programmierung. Mit Beiträgen von M.H. van Emden, J . R . Ennals, S. Gregory, P. H a m m o n d , R . A . Kowalski, F . Kriwaczek, M . J . Sergot. Oldenbourg Verlag, München. [Clocksin/Mellish 1987] Clocksin, W . F . und C S . Mellish ( 1 9 8 7 ) : Programming in P R O L O G . 3rd edition, Springer-Verlag, Berlin. [Conlon 1985] Conlon, T. (1985): Start Problem-Solving with P R O L O G . Addison-Wesley, Reading, Mass. [Cordes et al. 1988] Cordes, R.; R . Kruse; H. Langendörfer; H. Rust ( 1 9 8 8 ) : P R O L O G . Eine methodische Einführung. Vieweg, Braunschweig. [DECsystem-10 Prolog User's Manual] D e p a r t m e n t of Artificial Intelligence, University of Edinburgh, Edinburgh, Scotland. [Dickenberger 1987] Dickenberger, U. ( 1 9 8 7 ) : W i e die Alten den Tod bedichten. Die Inschriften des S t u t t g a r t Hoppenlau-Friedhofs. Magisterarbeit, Institut für Literaturwissenschaft, Universität Stuttgart. [Gazdar/Mellish 1987] Gazdar, G. and C. Mellish ( 1 9 8 7 ) : Natural Language Processing In P R O L O G . A n Introduction T o Computational Linguistics. New Horizons in Linguistics 2. E d . by John Lyons, 194 LITERATURVERZEICHNIS LITERATURVERZEICHNIS Richard C o a t e s , Gerald Gazdar and M a r g a r e t Deuchar. Penguin [Schöning 1987] Schöning, U. ( 1 9 8 7 ) : Logik für Informatiker. Bibliographisches Institut Wissenschaftsverlag, Mannheim. Reihe Informa- Books. [Giannesini et al. 1988] Giannesini, F.; H. Kanoui; R . Pasero und M. van Caneghem ( 1 9 8 8 ) : P R O L O G . Addison-Wesley, Bonn. tik, Band 56. [Sterling/Shapiro 1988] Sterling, L. und E . Shapiro ( 1 9 8 8 ) : P R O L O G . Fortgeschrittene Programmiertechniken. Addison-Wesley, Bonn. [Hanus 1987] Hanus, M. ( 1 9 8 7 ) : Problemlösen mit P R O L O G . Teubner, Stuttgart. [Walker et al. 1987] Walker, A., M. M c C o r d , J . F . Sowa und W . G . Wilson ( 1 9 8 7 ) : Knowledge Systems and P R O L O G . A Logical Approach [Holland 1986] Holland, G . (19S6): Problemlosen mit m i c r o - P R O L O G . Teubner, S t u t t g a r t . ( 1 9 8 8 ) : P R O L O G . Grundlagen und Anwendungen. Leitfäden der angewandten Informatik, Teubner Verlag, S t u t t g a r t , 2. Auflage. [Kluzniak/Szpakowicz 1985] Kluzniak, F . und S. Szpakowicz (1985): P R O L O G for Programmers. Academic Press, London. [Kononenko/Lavrac 1988] Kononenko, I. und N. Lavrac (1988): P R O L O G Through Examples. A P r a c t i c a l P r o g r a m m i n g Guide. Sigma Press, Wilmslow, Cheshire, U . K . " [Kowalski 1979] Kowalski, R. ( 1 9 7 9 ) : Logic for Problem Solving. NorthHolland, New York. [Malpas 1987] Malpas, J . ( 1 9 8 7 ) : P R O L O G : A Relational Language and its Applications. Prentice Hall, Englewood Cliffs, N . J . [Marcus 1987] Marcus, C. ( 1 9 8 7 ) : P R O L O G P r o g r a m m i n g . Applications for Database Systems, E x p e r t Systems, and N a t u r a l ' L a n g u a g e Systems. Addison-Wesley Publications, Reading, M a s s . [Pereira/Shieber 1987] Pereira, F. und S.M.Shieber ( 1 9 8 7 ) : P R O L O G And Natural Language Analysis. Center for the Study of Language and Information. Stanford University, Stanford, California. Pereira, F . C . N , and D.H.D. W a r r e n ( 1 9 8 0 ) : Definite Clause G r a m m a r s for Natural Language Analysis. A Survey of the Formalism and a Comparison with Augmented Transition Networks. In: Artificial Intelligence, 13, 2 3 1 - 2 7 8 . [Rogers 1987] Rogers, J . B . to E x p e r t Systems and Natural L a n g u a g e P r o c e s s i n g . AddisonWesley Publishing Company, Reading, Massachusetts. [Kleine Büning/Schmitgen 1988] Kleine Büning, H. und S. Schmitgen [Pereira/Warren] 195 (1987): A PROLOG Primer. Addison- Wesley, Reading, Mass. [Schnupp 1986] Schnupp, P. ( 1 9 8 6 ) : P R O L O G : Einführung in die P r o grammierpraxis. Hanser, München. LITERATURVERZEICHNIS 196 Anmerkungen zur Literatur Die Popularität von P R O L O G drückt sich auch in der wachsenden Zahl von Veröffentlichungen aus. Das Literaturverzeichnis stellt eine Auswahl der neueren Veröffentlichungen dar und verweist außerdem auf einige etwas speziellere Quellen, die für das vorliegende Buch verwendet wurden. Index Nur vier Titel, die für das weitere Arbeiten mit P R O L O G für Sie wahrscheinlich von größerer Bedeutung sind, sollen hier kurz besprochen werden: • [Clocksin/Mellish 1987]: Eine der ersten leicht ; verständlichen < Belegung 44 \+ 156 PROLOG-Einführungen. Standardwerk. Beschreibt den de facto- =.. Standard von P R O L O G . =< 156 >= 156 • [Giannesini et al. 1 9 8 8 ] : Einführung und Vertiefung, ausführliche Anwendungsbeispiele für natürlichsprachliche Systeme, kleines E x p e r t e n s y s t e m . Verwendet P R O L O G II. 147 > 156 ! 142 , 19 • [Pereira/Shieber 1987]: Gute Übersicht über gängige Algorithmen :- 18 der Computerlinguistik und deren Kodierung in P R O L O G . Setzt ?- 19 • [Sterling/Shapiro 1988]: Fortgeschrittene Programmiertechniken. call 151 157 158 142 cut-fail-Kombination Datenbasis DCG Sehr gute Einfuhrung in die Theorie und P r a x i s der Logikpro- Ableitung Akkumulator 50,61 91 149, 186 Algorithmus 31 Ambiguität Anfrage 95 14, 38 append deklarativ delete 146 atomar 2 4 , 27, 3 0 , 50 atomic 146 augmentieren 16 bagof 152 Baum 108 178 deterministisch 138 Eindeutigkeit element 145 62 konzeptioneller 151 atom 134 Evaluation 137 24 83 Definite Clause G r a m m a r 25 Atom 14 Entwurf 63 Argument 144 103 debugging 70 grammierung. Axiom 93 cut Abbruchbedingung assert Blatt convert Abbildung ASCII 14, 37 concatenate Kenntnisse in Logik, Automatentheorie und Computerlinguistik voraus. Geeignet als weiterführende L i t e r a t u r zu diesem B u c h . 2 6 , 32 Beweis 154 fail 140,144 Fakt 16 Funktor getO 119 70 156 25 1 3 6 , 137 Grammatik kontextfreie 90 kontextsensitive Implikation 18 90 103 198 INDEX Inferenzmaschine Instantiierung integer is 14 o c c u r check 32, 39, 45 61 Kategorie lexikalische 90 Klausel 16, 19, 39 Knoten 93 Kommentar komplex Konstante Startsymbol Prädikat 19 92 119 prozedurale Prompt put leere 58 listvar Regel Mehrdeutigkeit member 95 146 37, 38 158 Negation Nichtterminalsymbol 138 154 49 repeat 141 replace 179 retract 151 retractall 144 negation as failure nonvar 18 Rekursionschritt Meta-Programmierung name 146 158 73 Rekursion 61 Modus Ponens 136 Redundanz 93 reverse 154 90 151 180 „naive" Rumpf. Scheitern Schleife Syntaxfehler 83 162 19, 39 43 51 61 146 2 6 , 27, 3 0 26 uninstantiierte 26 Variablenbelegung 45 Verfeinerungsstufe Wissensbasis 30 80 14 Wissensrepräsentation 24 write 24 25 Terminalsymbol trace var 82 Variablenersetzung 138 45, 46 140 Unifikation 29 uninstantüert 32 134 read.sentence 148 Markierung 171 1 3 6 , 137 read 58 93 true 167 Prototyp 57 139 133 prozedural 90 Syntaxbaum komplexer „prozedurales" 92 24 Term 14 40 anonyme 23 Teilstruktur PROLOG Unteranfrage Variable atomare tab 90 „pure" Listenkonstruktor 90 Programmiersprache 92 157 Liste 134 90 30 156 Struktur 138 118 162 Produktion 19,39 Lexikon String 134 pretty printer 19 Konstruktionsregel length Stelligkeit eingebautes Konstituentenstruktur not 119 Präterminalsymbol 25 Konstituente nl partiell 180 151 147 Unterprädikat Sprachanalyse deterministisches 120 134, 135 152 97 permute univ 72 Parsing 17 Konjunktion setof built-in 27,50 kompositioneil 97 unique 37 Schnittstelle Seiteneffekt Parser ist_liste Lesart Schlußregel 150 146 156 Kopf 176 Operator 199 INDEX 90 136 Wurzel Zahl 93 25 Zielklausel 39 85
© Copyright 2025 ExpyDoc