Home

schemeall (fileadmin/user_upload/Forschungseinrichtungen/ics/files

image

Contents

1. 95 Turtle Grafik Abschnitt A 3 2 S 475 gezeichnte mit den Konstrukten draw lt strich laenge gt und turn lt winkel gt Programm 1 16 S 97 Abbildung 1 19 Turtle Grafik nm let 00001 begin print Eck LISP hat ein dia logisches Konzept newline 0 Zaehler if 00001 600001 begin 300000 Zaehler 1 600000 6 Beispiel Geschachtelte Iterationen Erfahrungsgem wird ein Verstehen von Iterationkonstrukten schwieri ger wenn sie geschachtelt vorkommen d h wenn Iterationen innerhalb 96 KAPITEL 1 KONSTRUKTE von anderen Iterationen stattfinden Als grobe Daumenregel ist ein intui tives Ranking der Verstehbarkeit von Konstrukten annehmbar von leicht mit wachsender Schwierigkeit wie folgt 1 Sequenz z B begin 8 77 2 Alternative z B cond S 53 3 Iteration z B do gt S 91 4 mehrfach geschachtelte Iterationen z B do do 5 97 5 Spr nge nicht lineare Kontrollstrukturen z B call cc S 285 6 Rekursion z B letrec S 76 7 geschachtelte Rekursionen z B Y S 277 8 Nebenl ufigkeit z B thread S 355 Das Konstrukt nm Eck gt S 97 zeichnet mit Hilfe der Turtle Grafik Abschnitt A 3 2 S 475 ein Bild das einer sogenannten Hilbert Kur vel hnelt Die Iterationen im Konstrukt n Eck befindet sich in der Iteration des Konst
2. 0 Zaehler LISP hat ein dia logisches Konzept LISP hat ein dia logisches Konzept LISP hat ein dia logisches Konzept LISP hat ein dia logisches Konzept LISP hat ein dia logisches Konzept LISP hat ein dia logisches Konzept LISP hat ein dia logisches Konzept L sung 3 Z hlschleife mit Verarbeitung im lt exit gt Ausdruck eval gt do Zaehler 6 Zaehler 1 begin print LISP hat ein dia logisches Konzept newline 0 Zaehler gt LISP hat ein dia logisches Konzept LISP hat ein dia logisches Konzept LISP hat ein dia logisches Konzept LISP hat ein dia logisches Konzept LISP hat ein dia logisches Konzept LISP hat ein dia logisches Konzept LISP hat ein dia logisches Konzept Die L sungen 2 und 3 stellen eine trickreiche Nutzung des do Konstruktes dar Sie sind weniger transparent als die L sung 1 Hier sind sie nur zum Verstehen des do Konstruktes formuliert Unstrittig ist die L sung 1 den beiden L sungen 2 und 3 vorzuziehen Sie hat die vom Leser gewohnte einfache do Struktur und wird daher schneller ver standen Beispiel Zahlen in einer Liste summieren L sung 1 Addieren der Zahlen im Verarbeitungsk rper des do Konstruktes 1 2 KOMBINIEREN VON KONSTRUKTEN Ja eval gt define Summe der Zahlen lambda 1 do liste 1 cdr liste Akkumulator 0 Hilfs variable f r das Ergebnis null liste Akkumulator Ende bedingung cond
3. Da das A Verfahren den k rzesten Weg ermittelt k nnen wir Ziel und Start Knoten vertauschen und erhalten den gleichen Weg wenn wir die erzeugte Liste umkehren Bei der Tiefensuche ist dies nicht der Fall eval gt Depth first Search U H gt U E C H eval gt reverse Depth first Search H U gt UEBAC H eval gt A Search U H gt U E C H eval gt reverse A Search H U gt U E C H 2 2 4 Zusammenfassung Liste A Liste und P Liste Die Assoziationsliste kurz A Liste ist eine Liste deren Elemente Subli sten sind wobei das erste Element jeder Subliste die Aufgabe eines Zu griffsschl ssels hat Statt Sublisten k nnen auch Punkt Paare stehen Ge nutzt werden Konstruktionsmittel f r die einfache Liste d h die Kon struktoren cons und list die Selektoren car cdr und list ref das Pr dikat pair und die Mutatoren set set car und set cdr Der Mutator set dient zum Benennen einer existierenden Teil Liste Die Mutatoren set car und set cdr ndern Listen elemente Die Selektoren f r ein A Listen Element Subliste pr fen das Schlusselelement Der Selektor assoc vergleicht mit equal und der Selektor assq mit eq In klassischen LIPS Systemen ist jedem Symbol eine zun chst lee re Eigenschaftsliste engl property list kurz P Liste zugeordnet Das putprop Konstrukt f gt eine neue Eigenschaft ein bzw berschreibt ei ne schon vorhandene Das getprop Ko
4. Erster Summand lambda Summe list ref Summe 1 Zweiter Summand lambda Summe list ref Summe 2 Konstruktoren f r die rechte Seite der Summenregel Bilde Summe lambda S_1 S_2 list 4 51 82 Vereinfache Summe lambda Summe let S 1 Erster Summand Summe S 2 Zweiter Summand Summe cond and number S 1 number S 2 S 1 S 2 and number S 1 zero S 1 S 2 and number S 2 zero S 2 S 1 Gleiche Variable S 1 S 2 Bilde Produkt 2 S 1 t Summe Konstruktor Selektoren und Pr dikat F r das Produkt Produkt lambda x and pair x or eq car x eq car x Mul Multiplikand lambda Produkt list ref Produkt 1 Multiplikator lambda Produkt list ref Produkt 2 Konstruktoren f r die rechte Seite der Produktregel Bilde Produkt 154 KAPITEL 2 KONSTRUKTIONEN lambda M_ 1 M 2 list M 1M 2 Vereinfache Produkt lambda Produkt let M 1 Multiplikand Produkt M 2 Multiplikator Produkt cond or and number M 1 zero M 1 and number M 2 zero M 2 0 eq M 1 1 M 2 eq M 2 1 M 1 and number M 1 number M 2 M 1 M 2 t Produkt Ableitungsregeln Ableiten lambda Formel Variable cond Konstante Formel 0 dc dx gt 0 Variable Formel cond Gleiche Variable dx dx gt 1 Formel Variable 1 t 0 Su
5. Vorgang anzeigen vgl Al l t display Bearbeiten Sie display car Zirkulaere Liste newline Vorgangsverwaltung Zirkulaere Liste Start der lokalen endrekursiven Hauptfunktion Vorgangsverwaltung Z Liste Hier das Protokoll einer beispielhaften Applikation von Verwalten von Arbeitsvorgaengen auch Abbildung 2 5 S 172 eval gt define ARBEITSPLAN list ber die Investition Lagerhalle West entscheiden Zeugnis f r den Abteilungsleiter Meier diktieren 2 2 ABBILDUNGSOPTION LISTE 173 Budgetplanung f r die Zentralabteilung aufstellen eval gt set cdr cddr ARBEITSPLAN ARBEITSPLAN eval gt ARBEITSPLAN gt 0 ber die Investition Lagerhalle West entscheiden Zeugnis f r den Abteilungsleiter Meier diktieren Budgetplanung f r die Zentralabteilung aufstellen 0 eval gt Verwalten von Arbeitsvorgaengen ARBEITSPLAN gt N chster Vorgang Ja Neuen Vorgang einf gen Neu Vorgang fertig bearbeiten OK Ende Stop Zeige Vorgang sonst sonst Bearbeiten Sie ber die Investition Lagerhalle West entscheiden N chster Vorgang Ja Neuen Vorgang einf gen Neu Vorgang fertig bearbeiten OK Ende Stop Zeige Vorgang sonst Ja N chster Vorgang Ja Neuen Vorgang einf gen Neu Vorgang fertig bearbeiten OK Ende Stop Zeige Vorgang sonst sonst Bearbeiten Sie Zeugnis f r den Abteilungsleiter Meier diktieren N chster Vorgang Ja Neuen Vorgang einf gen N
6. eval gt Chart Konto All gt Abbildung 3 3 S 422 Mit den definierten Slots und Methoden unseres Beispiels Konto S 329 ergibt sich die Abbildung 3 4 S 427 Diese Abbildung erzeu gen wir mit dem folgenden Konstrukt Chart Konto Example Chart Konto Example Konstrukt eval gt define Chart Konto Example let fontB make object font 40 modern normal bold fontI make object font 20 modern italic normal fontN make object font 20 modern normal normal width 850 0 frame vc append text lt lt fachklasse gt gt fontI 30 0 0 hc append 0 text HEGB fontN 50 0 0 text Kontos fontB 50 0 0 text public version 1 0 fontI 30 0 0 hline width 20 0 text Identifizierung number id fontN 30 0 0 text Name Inhaber string name u fontN 30 0 0 text Adresse Inhaber string N 3 3 NOTATION MIT UML fontN 30 0 0 text Binzahlungen list fontN 30 0 0 text Auszahlungen list fontN 30 0 0 text Kontostand number 0 fontN 30 0 0 hline width 20 0 text lt lt Selektoren gt gt fontI 30 0 0 text get Identifizierung number fontN 30 0 0 text get Name Inhaber string fontN 30 0 0 text get Adresse Inhaber string fontN 30 0 0 text get Einzahlungen list fontN 30 0 0 text get Auszahlungen list fontN 30 0 0 text get Kont
7. Orientiert basiert oder gepr gt In der Literatur werden in diesem Zusammenhang Beiworte wie orien tiert oder basiert verwendet Stets verdeutlichen solche Beiworte dass der Denkrahmen nicht auf die reine Lehre beschr nkt ist Wir bezeichnen eine Konstruktion als funktions gepr gt selbst wenn sie z B das print Konstrukt enth lt das wegen des Nebeneffektes eingesetzt wird und nicht zur Erzielung eines Funktionswertes Entscheidend ist das Sich leiten lassen vom funktionalen Modell Kompositionen anwendungsspezifischer Funktionen die weitgehend frei von Nebeneffekten definiert sind geben der Konstruktion ihr Beiwort funktions gepr gt Die Folge dieser LISP Potenz ist eine Konstruktevielfalt Um sich in dieser gro en Menge zurechtzufinden bedarf es eines pragmatischen Leitfadens Abschnitt 2 1 2 S 146 Wir w hlen dazu eine aufgaben bezogene Klassifikation in die vier Typen l 2 Konstruktor Selektor incl Pr sentator 3558 11 2 1 VERSTEHEN EINER KONSTRUKTION 145 3 Pradikat und 4 Mutator auch Modifikator genannt incl Destruktor Ein Konstruktor erzeugt und kombiniert Einheiten zu neuen Ein heiten Dabei ist eine Einheit z B ein Objekt eine Funktion Menge Liste oder ein Vektor Ein Selektor erm glicht den Zugriff auf eine solche Einheit Pr dikate vergleichen Einheiten Sie pr fen z B auf Gleich heit oder Identit t und stellen damit
8. x 4 y define Karl x y x 4 y k rzere Schreibweise Karl 223 gt 6 Falls z B module compat putprop Marx Doku Ber hmter Mann getprop Marx Doku gt Ber hmter Mann define struct Konto Nummer Inhaber Stand auto transparent mutable auto value 0 define S1 make Konto 1 Mustermann S1 gt struct Konto 1 Mustermann 0 define Konto class object init id name field Nummer id define Inhaber name field Stand 0 super new define public get Inhaber lambda Inhaber define public set Inhaber lambda neuerInhaber set Inhaber neuerInhaber define I1 new Konto id 1 name Mustermann Il gt str ctscobject Kontos sss 472 ANHANG A LISP SYSTEME Selektoren und Mutatoren define Motto LISP macht Freu n de define Mein Symbol Motto car Motto gt LISP cddr Motto gt Freu n de Vorab require rnrs base 6 und require rnrs mutable pairs 6 set car Motto Lernen set cdr Motto ist m hsam Motto gt Lernen ist m hsam Mein Symbol gt Lernen ist m hsam Nebeneffekt Konto Inhaber S1 gt Mustermann set Konto Inhaber S1 SAP send Il set Inhaber SAP send Il get Inhaber gt SAP Pr dikate und Fallunterscheidung define Foo A define Baz Foo eg Foo Baz gt t benennen dasselbe Objekt eg cons A B co
9. 6 Effizienz Die Software benotigt moglichst wenig Ressourcen Aufgrund der langj hrigen Fachdiskussion ber die Objekt Orientie rung wollen wir annehmen dass dieses Paradigma etwas besseres ist als das was die Praktiker immer schon gewusst und gemacht haben Da mit stellt sich die Kernfrage Wenn das objekt orientierte Paradigma die L sung ist was ist eigentlich das Problem Des Pudels Kern ist offen sichtlich das Unverm gen komplexe Systeme mit angemessenem wirt schaftlichen Aufwand zu meistern Objekt Orientierung verspricht des halb 108 e einerseits komplexere Systeme erfolgreich konstruieren und be treiben zu k nnen und e andererseits die Erstellungs und Wartungskosten von komplexen Systemen zu senken Bewirken soll diesen Fortschritt prim r eine wesentliche Steigerung der Durchschaubarkeit der Modelle in den Phasen des Lebenszyklus Ab bildung 1 13 S 51 Die Grundidee ist Ein Objekt der realen oder erdachten Welt bleibt stets erhalten Es ist ber die verschiedenen Ab straktionsebenen leicht verfolgbar Das gewachsene Verst ndnis ber die Objekte der realen Welt verursacht eine gr ere Modelltransparenz Was ist ein Objekt im Rahmen der Erarbeitung eines objekt orientierten Modells 25Das Koppelwort Objekt Orientierung ist hier mit Bindestrich geschrieben Einerseits erleichtert diese Schreibweise die Lesbarkeit andererseits betont sie Pr fix Alternativen wie z B Logik
10. Teil 3 lt sexpr gt f r Teil 3 Teil 3 Entsprechend unserer Diskussion ber die funktionale Alternative ist die Sequenz auch wie folgt definierbar eval gt define Gesamt let Teil 1 lambda Teil 2 lambda Teil 3 lambda Teil 1 Teil 2 lt sexpr gt f r Teil 1 lt sexpr gt f r Teil 2 lt sexpr gt f r Teil 3 Teil 3 e Solange bei der Ermittlung des Wertes f r eine lokale Variable kein Bezug auf die Variable selbst genommen wird ist die Reihenfolge erst Wertermittlung Auswertung des Argumentes dann Bindung ausreichend Soll jedoch ein rekursiver Bezug m glich sein dann muss die Variable bei ihrer Wertermittlung in der Umgebung der Auswertung schon exi stieren Notwendig sind dann folgende Schritte 76 KAPITEL 1 KONSTRUKTE 1 Erweiterung der Auswertungsumgebung um die Variable dabei kann die Variable an einen beliebigen Wert gebunden sein 2 Ermittlung des Wertes fur diese Variable und 3 Bindung der Variablen an den Wert in derselben Umgebung Diese Schrittfolge simuliert das folgende 1et Konstrukt eval gt let Foo UNDEFINIERT Schritt 1 set Foo Schritte 2 und 3 lambda lt lt TOO POO sra sre gt In vielen LISP Dialekten so auch in Scheme hei t das quivalente Konstrukt letrec wobei der Postfix rec die Abk rzung f r recursiv ist Wir behandeln das 1etrec Konstrukt bei der Er rterung der Rekursion Ab
11. eval gt define syntax rule 2 Multiplikant eval 2 Multiplikant eval gt Foo 4 gt ERROR reference to an identifier before its definition 2 eval gt 2 5 gt 10 eval gt define Foo lambda x 2 x eval gt Foo 4 gt 8 Um Verwirrungen zu vermeiden sollten wir einem Symbol als Schlus selwort einer Makrodefinition nicht einen anderen Wert zuweisen eval gt define 2 eval gt Foo 7 gt 14 eval gt define Baz lambda x 2 amp eval gt Baz 7 gt 7 Eine etwas umfangreichere Makrodefinition zeigt das Programm 2 8 S 298 Das dortige definep Konstrukt eine Funktion pr ziser ein lt procedure gt Konstrukt ist in der Lage hnlich wie ein let Kon strukt Abschnitt 1 2 2 S 69 beliebig viele Symbole an Werte zu binden Ein wesentliches Kriterium ist die jeweilige Umgebung in der das einzelne define Konstrukt evaluiert wird Erst wird daf r der Wert ermitteln und zwar in der aktuellen Umgebung vor Eintritt in das Kon strukt hier global namespace genannt Anschlie end wird das je weilige define Konstrukt in der inneren Umgebenung des let Kon struktes hier let namespace genannt evaluiert Die beiden Umge bungen sind zu unterscheiden und sind daher beim eval Konstrukt ex plizit anzugeben N heres dazu Abschnitt 2 7 S 319 Die L sung hat folgende Grundstruktur define global namespace current namespace let let namespace make base na
12. putprop Schulze Beruf Manager putprop Krause Beruf Schreibkraft t eval gt Modul P gt t eval gt getprop P1234 Beruf gt Manager eval gt getprop P5678 Beruf gt Schreibkraft eval gt P1234 gt ERROR reference to an identifier before its definition P1234 Hinweis Eigenschaft Primop Handler Manche LISP Systeme stellen einen sogenannte Primop Handler zur Ver f gung z B PC Scheme Es wird dann festgestellt ob ein Symbol eine vor gegebene Eigenschaft hier PCS PRIMOP HANDLER hat wenn ja dann wird dessen cdr Teil an die Stelle des Namens gesetzt Das folgende Bei spiel verdeutlicht die Auswertung der Eigenschaft PCS PRIMOP HAND LER PC eval gt define FOO lambda X X 7 gt FOO PC eval gt FOO 4 gt 11 PC eval gt putprop FOO Hier ohne Bedeutung lambda Y Y 3 PCS PRIMOP HANDLER gt Hier ohne Bedeutung lambda Y Y 3 PC eval gt FOO 4 gt 7 PC eval gt FOO gt lambda Y Y 3 Mit Hilfe des Iterationskonstruktes for each gt S 89 ist von ei ner vorgegebenen A Liste eine P Liste einfach erstellbar Dazu definieren wir das Konstrukt Make Lexikon eval gt define Make Lexikon lambda Symbol A Liste for each lambda x putprop Symbol car x list ref x 7 A Liste eval gt define My A Liste Telefon 04131 63845 Ort Reppenstedt Telefon 01626989027 eval gt Make Lexikon
13. send A001 abheben 100 send A001 einzahlen 200 eval gt Batch Bewegungen gt Keine Deckung Neuer Kontostand 200 EUR Den gleichen Fall verarbeiten wir nun mit Treads und erhalten f r diese Daten ein korrektes Ergebnis eval gt define Batch Bewegungen with Threads lambda thread lambda send A001 abheben 100 thread lambda send A001 einzahlen 200 sleep 1 0 eval gt define A001 new Konto eval gt Batch Bewegungen with Threads gt Neuer Kontostand 200 EUR Neuer Kontostand 100 EUR Die Synchronisation ist aber f r mehre Buchungsvorg nge nicht pas send Nehmen wir jetzt die folgenden 5 Buchungen an dann ist das Ergebnis falsch 362 KAPITEL 2 KONSTRUKTIONEN eval gt define Batch Bewegungen with Threads lambda thread lambda send A001 abheben 100 thread lambda send A001 abheben 100 thread lambda send A001 einzahlen 200 thread lambda send A001 abheben 100 thread lambda send A001 einzahlen 200 sleep 1 0 eval gt define A001 new Konto eval gt Batch Bewegungen with Threads gt Neuer Kontostand 200Neuer Kontostand 400 EUR EUR Neuer Kontostand 300 EUR Neuer Kontostand 200Neuer Kontostand 100 EUR EUR Das Ergebnis zeigt das zu gew hrleisten ist das ein einmal begon nener Buchungsvorgang solange nicht unterbrochen wird bis seine Aus f hrung im kritischen Pfad vollst
14. set Execute Process Wait Process set Wait Process Activ Activ eval gt define Execution Order lambda n letrec step lambda m cond gt mn stop t display m display step display PR newline step m1 step 1 eval gt define syntax rule Process Rotation Liste 1 Liste 2 Alternate Process Stack Liste 1 Process Stack Liste 2 eval gt define syntax rule Task Lists L1 L2 set PR Process Rotation L1 L2 eval gt Task Lists Task A Task B Task C Task I Task II Task III Task IV Entspricht nach Makroexpansion der Ausftihrung von eval gt set PR 2 5 ABBILDUNGSOPTION FUNKTION MIT UMGEBUNG 305 Alternate Process Stack Task A Task B Task C Process Stack Task I Task II Task III Task IV eval gt Execution Order 4 1 step Task A 2 step Task I 3 step Task B 4 step Task II stop eval gt Execution Order 2 1 step Task C 2 step Task III stop eval gt Execution Order 3 1 step 2 step Task IV 3 step stop II II V II II V II II V Beispiel Makro Funktions Gegen berstellung eval gt define Foo 6 eval gt define Call by Value Demo lambda X set X X X X Po6 eval gt Call by Value Demo Foo gt 30 eval gt Foo gt 6 eval gt define syntax rule Call by Reference Demo Sexpr begin set Sexpr Sexpr Sexpr Sexpr Foo
15. 114 1 20 Programm Restrekursiv definierte Funktion Saegezahn 118 1 21 Iteration dargestellt in ET Technik Funktion Wort zaeh IG sa ea ee ee ee ae ee ee eo ee ee 121 1 22 Rekursion dargestellt in ET Technik Funktion Wort Zzaehluing asics 4 een ee we Eee ed ein 121 1 23 Programm Beratungssystem konstruiert mit einem Bin r Dam 2352454 u nee oe eo eee 127 2 1 Klassifikation f r Konstrukte 142 2 2 Programmfragment Portierung von TLC LISP nach Scheme 147 481 482 TABELLENVERZEICHNIS 2 3 Programmfragment Portierung von einem kleinen LISP System nach Scheme us 2 4a wo rei KR ww Y 148 2 4 Strukturskizze des Programms Ableiten 157 2 5 Programm Hauspoststationen Knoten als P Listen abge DUAL osser erouer rnnr rar 199 2 6 Reihenfolge im Programm Depth first Search 202 2 7 Applikation des Offene Knoten Konstruktes in A bei Startknoten H ZielknotenU 212 2 8 Programm definep lt lt su ker a ed 4 2 we u Ben 298 2 9 Beispiel COBOL Datendefinition 307 3 1 Namensl nge Vor und Nachteile 380 3 2 Affic Empfehlungen 2 22 222er 380 3 3 Kennzeichnung der Reichweite eines Kommentars 391 3 4 Eine bew hrte Konvention f r Kommentare 392 3 5 Anzustrebende Eigenschaften f r eine Dokumentation 394 3 6 Vorschlag Identifier in der Dokumentation 396 3 7 Beispiel Mehrtreffer ET Plausibel
16. 22 2 2 225 2 18 Baum Fall 4 doppelte Rotation 2222 225 2 19 Baum Notationserl uterung 226 2 20 Elementarteilchen eines Symbols Literalatoms 249 2 21 Skizze einer Vererbung von Datenstrukturen 316 2 22 CLOS Bausteine Objekttypen 327 2 23 CLOS Bausteine Charakteristika 328 2 24 Kommunikation Beispiel SETT home 352 2 25 Beispiel Speicherauszug u 24 a ss os zes ne oaa 368 3 1 spezifizieren in den ersten Phasen ss lt 6 ss lt 404 3 2 UML Klassensymbol Rechteck 419 3 3 UML Klassensymbol mit Einteilung 422 3 4 UML Klassenbeispiel Konto 22 222200 427 3 5 UML Beziehungselement Assoziation 428 3 6 UML Vererbungsbeispiel Verwahrkonto 431 3 7 UML Generalisierung amp Spezialisierung 432 3 8 UML Klasse Wheel 24624 2 44 000 eee 434 3 9 Slid Zitat aae sac bee ati tens 439 3 10 LISP Slideshow Slide 7 oona 444 3 11 Slide LISPWizard aa su amp a a wine es EEN ORO amp S 446 A 1 PLI Scheme DrScheme bersicht 468 A 2 PLI Scheme DrScheme Macro stepper 469 A 3 Beispiel PLT Scheme Debugger Funktion rr Laenge 470 A 4 Turtle Grafik Fraktalfigur Schneeflocke 476 A 5 Turtle Grafik Das Haus des Nikolaus 478 Anhang B Literatur Notationshinwe
17. Matthias Felleisen Robert B Findler Matthew Flatt Shiriram Krishnamurthi How to design programs an introduction to programming and computing Cambridge MA The MIT Press 2001 Matthias Felleisen Daniel P Friedman A Closer Look at Export and Import State ments Computer Languages Vol 11 No 1 1986 pp 29 37 Flavor Interface to SCHeme FISCH Konzeption und Konstruktion einer LISP Umgebung f r die objektgepr gte Modellsicht der Softwareentwicklung Projekt bericht des Projektes FLAVOR Fachbereich 2 Hochschule Bremerhaven 1988 Christiane Floyd Hermann Kopetz Hrsg Software Engineering Entwurf und Spezifikation Stuttgart B G Teubner 1981 LITERATURVERZEICHNIS 491 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 John K Foderaro Keith L Sklower Kevin Layer The FRANZ LISP Manual June 1983 University of California Charles L Forgy OPS5 Users Manual Department of Computer Science Carnegie Mellon University Pittsburg Pennsylvania 15213 1981 Daniel P Friedman The Little LISPer ISBN 0 574 19165 8 Science Research As sociates 1974 Richard P Gabriel Performance and Evaluation of Lisp Systems Cambridge Mas sachusetts The MIT Press 1985 Third printing 1986 Richard P Gabriel The Why of Y in LISP Pointers Volume 2 Number 2 October November December 1988 pp 15
18. Serialized Function Mit dieser Mutual Exclusion wird nun das gew nschte Ergebnis erzielt eval gt define Batch Bewegungen with Threads lambda let Sync Synchronisation thread Sync lambda send A001 abheben 100 thread Sync lambda send A001 abheben 100 thread Sync lambda send A001 einzahlen 200 thread Sync lambda send A001 abheben 100 thread Sync lambda send A001 einzahlen 200 sleep 1 0 gt define A001 new Konto eval gt eval gt Batch Bewegungen with Threads Neuer Kontostand 200 EUR Neuer Kontostand 100 EUR Neuer Kontostand 0 EUR Neuer Kontostand 200 EUR Neuer Kontostand 100 EUR Bei genauer Betrachtung wird deutlich dass das klassische Producer Consumer Problem mit diesem simplen Konstrukt Synchronisation nicht f r alle Datenf lle gel st ist Es bedarf dazu einer Kommunikati on zwischen den Threads so dass ein Thread f r abbuchen bei kei ner Deckung nachfragt ob es noch Threads f r einzahlen gibt S 364 Bei einer solch aufwendigen Steuerung stellt sich die Frage ob eine vorhergehende Sortierung der Batch Daten nicht zweckm iger ist Mit dem thread wait Konstrukt lassen wir abh ngig von einer ge gebenen Situation den anderen Thread zun chst fertig abarbeiten 364 KAPITEL 2 KONSTRUKTIONEN eval gt void thread wait lt thread gt gt t mit lt thread gt Blockiert den aktuel
19. e die Schnittstelle Anzahl der Argumente Typ eines jeden Argu mentes sowie die Festlegung welche Argumente evaluiert wer den e den R ckgabe Wert Vorhersage des Typs z B ob Zahl Symbol Liste etc und ber e Nebeneffekte Ver nderung des eigenen Zustandes und oder des Zustandes von anderen symbolischen Ausdr cken Hinweis Konstrukt Der lateinische Begriff Konstrukt Construct Constructum bezeichnet ei ne Arbeitshypothese f r die Beschreibung von Ph nomenen die der di rekten Beobachtung nicht zug nglich sind sondern nur aus anderen beob achteten Daten erschlossen werden k nnen In der Linguistik ist z B Kom petenz ein solches Konstrukt Wir bezeichnen mit Konstrukt einen ver wendbaren Baustein der bestimmte Eigenschaften hat Beispiel zur Bezeichnung Konstrukt Wir sprechen von einem define Konstrukt wenn es sich um die folgen de Zeile handelt define foo interface value side effects body lambda Konstrukt Im Rahmen der EVAL Regeln wurde gezeigt Abschnitt 1 1 2 S 20 dass sich der Wert eines Konstruktes durch die Applikation Anwen dung des Programmcodes auf die Argumente ergibt Dabei bestimmt 36 KAPITEL 1 KONSTRUKTE das erste Listenelement den Programmcode Betrachten wir eine Funkti on y f x dann ist die grundlegende Operation die Applikation von f auf ein Argument x um den Wert y zu erhalten Bisher wurden eingebau te Konstrukte Funktionen wie z B oder o
20. eval gt define Baz 6 eval gt Call by Reference Demo Baz gt 30 eval gt Baz gt 36 eval gt Foo gt 6 eval gt Call by Reference Demo Foo gt 0 Achtung Name der freien Variablen benutzt eval gt Foo gt 36 306 KAPITEL 2 KONSTRUKTIONEN 2 6 Generierte Zugriffskonstrukte Dieser Abschnitt behandelt das automatische Generieren von Zugriffs konstrukten Fur die Liste die Assoziationsliste A Liste oder die Eigen schaftsliste P Liste konnten wir die primitiven eingebauten Konstruk toren Selektoren Pradikate und Mutatoren nutzen um damit unseren anwendungsspezifischen Verbund zu konstruieren War auf ein bestimm tes Feld einer A Liste zuzugreifen z B auf das Feld Name des Konto inhabers dann konnte mit dem assq Konstrukt ein entsprechender Selektor wie folgt definiert werden Abschnitt 2 2 2 S 183 eval gt define Name des Kontoinhabers lambda A Liste assq Name des Kontoinhabers A Liste Neben den Selektoren sind die Pr dikate und Mutatoren ebenfalls aus den eingebauten Grundfunktionen selbst zu konstruieren Solche Definitionen k nnen direkt vom LISP System generiert werden Zum Zeit punkt der Definition einer Datenstruktur sind unter Angabe einiger Steue rungsparameter die Konstrukte des Verbundes generierbar Dazu dient das define struct Konstrukt Abschnitt 2 6 2 S 309 Vorab betrachten wir das Konzept der passiven Daten prim r aus der Sicht akti
21. 4 4 9 gt 6 789 N heres zur PLT Historie und PLT Entwicklung gt http en wikipedia org wiki PLT_Scheme Zugriff 1 Feb 2010 470 ANHANG A LISP SYSTEME Datei Bearbeiten Anzeigen Sprache Scheme Einf gen Hilfe Namenlos define Speichern al Macro Stepper Debugger Syntaxpr fung A Start Z Stop Stack cond null Ej rrLaenge Over w lang scheme define Zaehlung lambda 1 Akkumulator cond nul1 1 Akkumulator t Zaehlung cdr 1 1 Akkumulator define rrLaenge lambda liste Zaehlung liste 0 2 rrLaenge ABCD FRE l ABCD z Akkumulator gt 0 aia Willkommen bei DrScheme Version 4 2 3 3m Sprache Module memory limit 512 megabytes Legende Scheme Quellcode S 116 Abbildung A 3 Beispiel PLT Scheme Debugger Funktion rr Laenge A 3 PLT SCHEME UBERSICHT 471 append A B C D gt A BC D define Foo 2 3 bindet Foo an den Wert 5 lambda x y x y gt lt procedure gt anonyme Funktion lambda x y x y 3 2 gt 1 Funktionsapplikation let x 3 y 2 x y gt 1 lokale Variablen let x 2 y 3 x x y lokale Variablen gt 8 sequentiell gebunden Rekursiver Bezug auf lokale Variable Foo letrec Foo lambda L cond null L 0 t 1 Foo cdr L Foo A B gt 2 define Karl lambda x y
22. Element 2 Element 3 Neue cons Zelle 0 Element_1 set cdr Zirkulaere_Liste Neue cons Zelle 0 0 0 0 ARBEITSPLAN gt Zirkulaere_ Liste Element_2 Element_3 Neuer Vorgang 0 Neue cons Zelle Element _1 Legende Symbole S 165 Programmcode S 170 Teil I S 175 Abbildung 2 7 Neuen Vorgang am Anfang der zirkul ren Liste einf gen cons Zelle Teil II 2 2 ABBILDUNGSOPTION LISTE 177 Ausgangssituation 0 0 0 ARBEITSPLAN gt Zirkulaere Liste Element_1 Element 2 Element 3 Neue cons Zelle 0 Platzhalter set cdr Neue cons Zelle cdr Zirkulaere_Liste set car Neue cons Zelle Neuer_ Vorgang set cdr Zirkulaere_Liste Neue cons Zelle 0 0 0 0 ARBEITSPLAN gt Zirkulaere Liste Element_1 Element _2 Element _3 0 Neue cons Zelle Neuer Vorgang Legende Symbole S 165 Programmcode S 170 Abbildung 2 8 Neuen Vorgang in die zirkul re Liste einf gen 178 KAPITEL 2 KONSTRUKTIONEN Funktion Quasi letzte Element letrec Quasi letzte Element lambda Listen_Zeiger Aktuelle Zeiger Vorhergehende_Position Das quasi letzte Element der zirkul ren Liste wird erkannt durch Vergleich mittels eq wobei Aktuelle Zeiger und Vorhergehende Position synchron die Liste
23. Neuen Vorgang einbauen eq Antwort Neu let Neuer Vorgang begin display Bitte geben Sie newline display Ihren Vorgang ein Zeichenkette newline read Neue cons Zelle list Platzhalter cond leq Car Zirkulaere Liste l1se set car zirkulaere Liste Neuer Vorgang Vorgangsverwaltung Zirkulaere Liste Vor dem aktuellen Vorgang den neuen Vorgang einbauen vgl A2 1 eq Ja begin display 2 2 ABBILDUNGSOPTION LISTE 171 Soll Ihr neuer Vorgang display vorher eingef gt werden Ja newline read set cdr Neue cons Zelle cdr Zirkulaere Liste set car Neue cons Zelle car Zirkulaefe Liste set car Zirkulaere Liste Neuer Vorgang set cdr Zirkulaere Liste Neue cons Zelle Vorgangsverwaltung Zirkulaere Liste vgl A2 2 t set cdr Neue cons Zelle cdr Zirkulaere Liste set car Neue cons Zelle Neuer Vorgang set edr Zirkulaere Liste Neue cons Zelle Vorgangsverwaltung Zirkulaere Liste Vorgang aus Liste entfernen vgl Al 2 eq Antwort OK letrec Quasi letzte Element lambda Listen Zeiger Aktuelle Zeiger Vorhergehende Position cond eq Listen Zeiger Aktuelle Zeiger Vorhergehende Position t Quasi letzte Element Listen Zeiger cdr Aktuelle Zeiger cdr vorhergehende Position Bor set cdr Quasi letzte Element Zirkulaere Liste eddr Zirkulaere Liste cdr Zirkulaere Liste cd
24. Schreibstil verdeutlicht das folgende Beispiel eval gt lambda list car cdr W car cdr X car cdr Y car cdr Z Means M Requirements R Engineering E O 74 KAPITEL 1 KONSTRUKTE gt MORE eval gt let W Means M X of O Y Requirements R Z Engineering E 1 list car cdr W car cdr X car cdr Y car cdr Z gt MOR B Intuitiv vermutet man in der Bindung der lokalen Variablen eines let Konstruktes die M glichkeit eine Sequenz zu konstruieren Da das let Konstrukt einer Applikation eines lambda Konstruktes entspricht ist der Vorgang der Auswertung der Argumente vom Vorgang der Bin dung der lambda Variablen an die Werte zu unterscheiden Bezogen auf das let Konstrukt formuliert Es werden zun chst alle Werte der loka len Variablen in einer prinzipiell beliebigen Reihenfolge ermittelt dann findet die Bindung der jeweiligen Variablen statt Da die Reihenfolge dieser Wertermittlung nicht allgemeing ltig fest liegt sondern sogar als Ansatz f r eine Parallelverarbeitung in LISP dient sollten wir beim let Konstrukt keine Sequenz unterstellen wie im folgenden Beispiel eval gt let Foo if print 1 Phase Foo Value f Bar if print 2 Phase Bar Value newline list Foo Bar gt 1 Phase 2 Phase Foo Value Bar Value Zu berticksichtigen ist dass die Ermittlung a
25. UDE 367 Umgebung 42 UML 419 unary function 100 uninterned Symbol 259 unquote 293 unquote splicing 293 unquote splicing 294 upward funarg 47 URL 352 Uthmann Thomas 496 Value 190 Variable 37 vc append 420 vector 217 vector 217 vector gt list 216 vector rer 217 vector set 217 508 Vererbung einfache statische 314 Vertragskonzept 411 vl append 420 vline 420 void 41 lt void gt 41 void 41 Vollzugsproblem 406 vr append 420 Wadsworth C 270 491 Wagenknecht Christian 21 355 497 Wagner Christian 5 Wagner J rgen 497 Weil William 495 Weinreb Daniel L 327 390 392 459 461 497 498 Weissman Clark 498 Wert Benennung 45 White Jon L 498 Winston Patrick Henry 239 390 498 Wirth Niklaus 498 Wong William G 498 Woodfield Scot N 418 490 write 473 write byte 353 WYSIWYG 437 XLISP 467 Yuasa Taiichi 498 Zdybel Frank 327 488 ZetaLISP 467 Zielerreichungsproblem 406 Zimmermann 490 Zusicherung 422 INDEX INDEX 509
26. eval cdr Teil F cons gt F NULL 274 KAPITEL 2 KONSTRUKTIONEN Statt den Namensraum die Umgebung explizit als R ckgabewert zu definieren ver ndern wir das F cons Konstrukt so dass sein Wert eine LISP Funktion ist eval gt define F cons lambda car Teil cdr Teil lambda Operation cond eq car Operation car Teil eq cdr Operation cdr Teil t eval gt F cons A B gt lt procedure gt eval gt F cons A B car gt A Diese R ckgabe Funktion wurde in einer Umgebung erzeugt in der car_Teil an den Wert A und cdr_Teil an den Wert B gebun den sind Erzeugt hei t Aus der Liste mit dem Symbol lambda in Pr fixnotation ist durch Evaluieren eine LISP Funktion nach au en durch lt procedure gt angezeigt entstanden Wird diese R ckgabe Funk tion angewendet dann haben ihre freien Variablen hier car_Teil und cdr_Teil die Werte der Definitionsumgebung weil in Scheme als Stan dardfall die lexikalische Bindungsstrategie implementiert ist Sie legt fest dass die Definitionsumgebung einer LISP Funktion ma geblich f r die Bindung von freien Variablen ist S 42 Daher definieren wir den Konstruktor F cons wie folgt eval gt define F cons lambda car Teil cdr Teil lambda Operation cond eq Operation F pair lambda t eq Operation F car lambda car Teil eq Operation F cdr lambda cdr Teil eq Operation
27. eval gt lambda X Y Y X 50 00 110 00 gt 60 256 nicht Wird das lambda Konstrukt evaluiert entsteht eine anonyme Funk tion Anonym weil sie keinen Namen hat Um die definierte Funktion zu benennen wird ein Symbol an sie gebunden d h der Wert eines Sym bols ist das evaluierte Lambda Konstrukt Eine solche Bindung bewirkt in Scheme das define Konstrukt eval gt define Abbuchen lambda Alter Saldo Abbuchungsbetrag Alter Saldo Abbuchungsbetrag eval gt Abbuchen gt lt procedure Abbuchen gt Hinweis Funktionsdefinition Das Konstrukt mit dem der Benutzer eine Funktion definieren kann hat in LISP Systemen verschiedene Namen und unterschiedliche Wirkungen In TLC LISP hei t es DE in Common LISP DEFUN Allen gemeinsam ist das Verkn pfen eines Symbols mit einem Funktionsobjekt 1 1 EINFUHRUNG HANDHABUNG VON KONSTRUKTEN 39 Das Symbol Abbuchen kann nun wie ein eingebautes Konstrukt z B wie das Subtraktions Konstrukt angewendet werden eval gt Abbuchen 110 00 50 00 gt 60 eval gt 23 40 2 30 gt 21 1 Als leicht merkbares begrenzt verallgemeinerbares Motto formuliert Form follows function Dieser beinahe klassische Leitsatz der Industrie Designer gilt auch in LISP define Verdopplung lambda Zahl 2 Zahl function form Das Anwenden einer Funktion auf Argumente ist mit dem apply Konstrukt explizit notierbar Es entspricht z B eval gt lt fun
28. eval gt Laenge Meyer AG Mueller OHG Schulze GmbH gt 3 eval gt Laenge A B C D z 2 Legende Bestimmung der L nge einer Liste d h Ermittlung der Anzahl ihrer Elemente Tabelle 1 19 Programm Beispiel einer rekursiven Definition Probleml sungen ber rekursive Definitionen sind f r LISP Programme kennzeichnend Schon bei der Definition von Syntax und Semantik zeig te sich die Einfachheit und K rze rekursiver Definitionen Eines der oft erw hnten Beispiele f r die Erl uterung der Rekursi on ist die Definition der Funktion Laenge z B 180 S 27ff oder 135 S 63ff Sie bestimmt die Lange einer Liste d h die Anzahl der Elemente Das nul1 Pradikat im Laenge Konstrukt Programm in Tabel le 1 19 S 114 stellt fest ob eine leere Liste vorliegt Es entspricht fol gender Definition eval gt define null lambda x eq x list Die rekursive Methode ist immer dann n tzlich wenn eine Familie verwandter Probleme vorliegt von denen eines so einfach ist dass sich die L sung direkt angeben l sst Diesen trivialen Fall bezeichnet Douglas R Hofstadter treffend mit Embryonal Fall 92 da sich die L sung des Gesamtproblems aus ihm entwickelt So l sst sich die L nge der leeren Liste sofort mit 0 angeben Die L nge einer Liste mit z B 3 Elementen ist zur ckf hrbar auf das einfa chere Problem der Ermittlung der L nge einer Liste mit 2 Elementen
29. eval gt define Foo lambda x x x 2 eval gt Foo gt 4 eval gt define Foo compile lambda x x x 2 eval gt compiled expression Foo gt FC eval gt Foo gt Hexadezimalcode eval gt eval Foo gt 4 Im Folgenden sind beide Moglichkeiten fur die Entscheidungstabelle von Abbildung 1 14 S 82 dargestellt Das erste Programm lt gt Tabel le 1 17 S 106 nutzt den funktionalen Ansatz Das zweite Programm Tabelle 1 18 S 107 verwendet die Auswertungsblockierung in Ver bindung mit dem eval Konstrukt Die Benutzerschnittstelle ist in der ET Abbildung des Abschnittes 1 1 2 Programm in Tabelle 1 15 S 83 au erhalb des ET Konstruktes de finiert Hier sind in beiden F llen die Bedingungen und Aktionen mit Hilfe des 1et Konstruktes als lokale Variable des Konstruktes ET Aus zahlung buchen formuliert also innerhalb der ET definiert Damit wird einerseits ein ungewolltes berschreiben im Falle bestehender oder neuer namensgleicher Konstrukte vermieden und andererseits die Zu geh rigkeit zum ET Konstrukt unmittelbar sichtbar Zus tzlich bewahren wir uns dadurch die leichtere berschaubarkeit der top level Umgebung weil diese dann weniger Eintr ge hat 1 2 4 Typische Fehler Ob LISP Anf nger oder LISP Profi LISP wizard alle machen Fehler der eine mehr der andere weniger Missverst ndliche Vorgaben Un kenntnis der Zusammenh nge logische Fehlschl sse und Fl chtigkeit sind h
30. gt lt variable gt lt argument gt lt body gt gt lt value gt ist zur ckf hrbar auf 1 2 KOMBINIEREN VON KONSTRUKTEN 73 eval gt lambda lt variable gt lt variable gt lt body gt lt argument gt lt argument gt gt lt value gt Hinweis let Konstrukt Das let Konstrukt ist h ufig als Makro Konstrukt realisiert Makros wer den in zwei Schritten abgearbeitet Zun chst wird aus einem Makro ein neuer symbolischer Ausdruck konstruiert Diesen Schritt nennt man ex pandieren Im zweiten Schritt wird der entstandene Ausdruck evaluiert In PC Scheme ist das Ergebnis des ersten Schrittes mittels EXPAND MACRO darstellbar Naheres Abschnitt 2 5 3 S 293 Damit konnen wir zeigen zu welchem Ausdruck das 1et Konstrukt expandiert PC Scheme eval gt EXPAND MACRO let A 1 B 2 Foo A B gt lambda AB Foo A B 1 2 let Konstrukt Das let Konstrukt entspricht der Applikation eines 1 ambda Konstruk tes Wir k nnen es als ein Konstrukt betrachten das zun chst lokale Variablen definiert und mit diesen Bindungen seinen Funktionsk rper lt body gt auswertet eval gt let Binden der 1 lokalen Variablen lt lokaleVariable gt lt sexpr gt Binden der n ten lokalen Variablen lt lokaleVariable gt lt sexprn gt lt body gt gt lt value gt Den syntaktischen Vorteil des Let Schreibstils gegen ber dem Lambda
31. set ARBETTSPLAN cons Urlaub festlegen ARBEITSPLAN eval gt ARBEITSPLAN gt Urlaub festlegen Uber die Investition Lagerhalle West entscheiden Zeugnis fur den Abteilungsleiter Meier diktieren Budgetplanung f r die Zentralabteilung aufstellen eval gt Ersten Vorgang l schen set ARBEITSPLAN cdr ARBEITSPLAN eval gt ARBEITSPLAN gt ber die Investition Lagerhalle West entscheiden Zeugnis fur den Abteilungsleiter Meier diktieren Budgetplanung f r die Zentralabteilung aufstellen 164 KAPITEL 2 KONSTRUKTIONEN Die Veranderung des Symbolwertes leistet das set Konstrukt weil es in der jeweiligen Umgebung das Symbol an den neuen Wert bindet Wir k nnen das set Konstrukt auch als Mutator des Zeigers AR BEITSPLAN auffassen der auf die erste cons Zelle der Liste zeigt Abbildung 2 3 S 165 Mit dem set Konstrukt kann ein Zeiger der auf eine cons Zelle zeigt auf eine andere vorhandene cons Zelle gesetzt werden Die Zei ger des car Parts bzw des cdr Parts einer cons Zelle bleiben davon unber hrt F r ihre nderung gibt es eigene Mutatoren die Konstrukte set car und set cdr Mutatoren f r die cons Zelle eval gt set car lt cons zelle gt lt sexpr gt Nebeneffekt lt modifizierte zelle gt eval gt set cdr lt cons zelle gt lt sexpr gt Nebeneffekt lt modifizierte zelle gt mit lt cons zelle gt Symbolischer Ausdruck der
32. set Einzahlungen cons list E Datum Betrag get Einzahlungen set Kontostand Betrag get Kontostand t error Keine Einzahlung hinzugef gt E Datum Betrag define public Add Auszahlung lambda A Datum Betrag cond and Buchungsdatum A Datum Betrag Betrag cond lt Betrag get Kontostand set Auszahlungen cons list A Datum Betrag get Auszahlungen set Kontostand get Kontostand Betrag t error Keine Deckung fuer Betrag t error Keine Auszahlung m glich A Datum Betrag Zuerst muss ein neues Konto hier A001 erzeugt werden damit es die hinzugef gten Methoden kennt Dann k nnen wir diese Methoden nutzen eval gt define A001 new Konto id 1 name Hinrich Bonin eval gt send A001 get Kontostand gt 0 eval gt send A001 Add Einzahlung 201020 100 00 eval gt send A001 get Kontostand gt 100 0 eval gt send A001 Add Auszahlung 201021 200 00 gt ERROR Keine Deckung fuer 200 0 eval gt send A001 Add Auszahlung 201021 45 00 send A001 get Auszahlungen 2017021 45 0 eval gt send A001 get Kontostand gt 55 0 eval gt 336 KAPITEL 2 KONSTRUKTIONEN Hinweis Ruckgabewert Wird die Methode Add Einzahlung oder Add Auszahlung ange wendet dann ist kein R ckgabewert definiert Falls wir Methoden wie Funktionen schachteln wollten w re es zweckm ig die ganze Instanz zur ckzugeben eval
33. set Kernel b Mutation 5 set Kernel c Mutation 7 set Kernel d Mutation 11 set Kernel e set Kernel set Kernel set Kernel Mutation 12 f g h set Kernel i J k 1 Mutation 14 Mutation 15 Mutation 18 Mutation 19 Mutation 21 Mutation 22 Mutation 25 Mutation 28 Mutation 30 Mutation 31 set Kernel set Kernel set Kernel set Kernel m set Kernel n set Kernel o set Kernel p Mutation 32 set Kernel g Mutation 33 r Mutation 35 S Mutation 39 t Mutation 41 Mutation 42 Mutation 44 Mutation 45 Mutation 46 Mutation 47 Mutation 50 set Kernel set Kernel set Kernel set Kernel u set Kernel v set Kernel w set Kernel x set Kernel y set Kernel z set Kernel N AA AA AA AANA NK AN AA N NN NAKA NK NA N IE a a a a a eee eee nnn ene ON set Kernel cons car Kernel cons car Restl1 cons car Rest2 Rest4 define Evolution lambda eval Kernel 2 8 KLASSE INSTANZ MODELL 327 Eine Klasse be stimmt die Struktur und das Verhalten einer Menge von Objekten die In stanzen genannt werden Klasse Instanz Eine Methode definiert die klas senspezifische Operation einer g
34. t neu eval gt Bar gt t neu t neu Dieser Nebeneffekt leuchtet unmittelbar ein wenn man das cons Zellen Modell f r Foo und Bar betrachtet Die Abbildung 2 4 S 167 zeigt dieses vor der Applikation des Mutators set cdr Problematisch sind Mutatoren immer dann wenn ihre Zerst rung sich auf mehrfach genutzte Objekte bezieht Als Merksatz formuliert Sind Mutatoren dabei dann ist Gleiches durch Gleiches nicht einfach ersetzbar N heres zur Semantik destruktiver Konstrukte z B 120 2 2 1 Zirkul re Liste Im obigen Beispiel Verwalten von Arbeitsvorg ngen k nnen wir mit dem set cdr Konstrukt den Bearbeitungszyklus einfach dadurch ab bilden dass der Zeiger des cdr Parts der letzten cons Zelle von AR BEITSPLAN auf die erste cons Zelle zeigt Nehmen wir an dass die Liste ARBEITSPLAN drei Elemente enthalt dann ware formulierbar 2 2 ABBILDUNGSOPTION LISTE 167 Foo 0 0 u 0 0 0 0 0 0 T t t t t t t Legende lt gt Abbilung 2 3 S 165 Abbildung 2 4 equal Foo Bar gt t eval gt define ARBEITSPLAN list Uber die Investition Lagerhalle West entscheiden Zeugnis fur den Abteilungsleiter Meier diktieren Budgetplanung fur die Zentralabteilung aufstellen eval gt set cdr cddr ARBEITSPLAN ARBEITSPLAN Aufgrund des READ EVAL PRINT Zyklus wird die Liste ARBEITS
35. 1 2 KOMBINIEREN VON KONSTRUKTEN 61 eval gt Symbol Kunde ist in Scheme nur einmal gespeichert eq car Meyer AG Kunde gt t eval gt Die Symbole sind identisch die Information dass sie Elemente einer Liste sind ist zweimal abgebildet daher keine Identit t eq Meyer AG Kunde Daten zur Meyer AG gt false eval gt Gleichheit von Listenstrukturen und Listenelementen equal Meyer AG Kunde Daten zur Meyer AG gt true eval gt Ein Symbol ist nicht gleich einer Zeichenkette equal Kunde Kunde gt false Legende Tabelle 1 4 S 56 Tabelle 1 6 Programmfragment Erkennen des Operandentyps Kunde hat auch das equal Konstrukt f r diese Argumente den Wert true Achtung Die Umkehrung gilt nicht Mit dem eq Konstrukt sind wir in der Lage Pr dikate f r die Er kennung von Kunden Lieferanten Kassenkonten etc zu definieren Da diese Pr dikate zum Unterscheiden zwischen verschiedenen Objekten dienen bezeichnet man sie auch als Diskriminatoren In Scheme ha ben Pr dikate blicherweise als Kennzeichen am Ende ihres Namens ein Fragezeichen daher nennen wir die Pr dikate Kunde Lieferant Kassenkonto etc Entsprechend der Matrix Spalte Tabelle 1 3 S 53 kann Neuanlegen mit der Struktur von Programmfragment in Tabelle 1 7 S 62 definiert werden Im Programmfragment der Tabelle 1 7 S 62 sind die Operationen x11 x21 und x31 nic
36. 397 3 8 Kategorien von Anforderungen 405 3 9 Problemarten beim Spezifizieren 406 3 10 Konstruktions Kategorien und Arbeitstechniken 406 3 11 Slideshow Kommandos 437 Abbildungsverzeichnis 1 1 Kommunikationsmittel Programmiersprache 12 1 2 Klassisches Beispiel Hello World 12 1 3 Symbolische Ausdr cke 2 05 16 1 4 Der LISP Prozess READ EVAL PRINT Zyklus 21 1 5 Beispiele zur EVAL Regell 222222000 22 1 6 Beispiele zur EVAL Regel2 2 222202 0020 24 1 7 Konstrukt Alternative if then else end f 25 1 8 Beispiele zu wahr 2 6 6 se ees hw 0 su Eo ORO 26 1 9 Beispiele zur EVAL Regel3 eee wh ee eee des 27 1 10 Beispiele zur EVAL Regel4 2 22 2 222 28 1 11 I ISP Rosst kt oo zu 4 ehe ar eee oom ee ee 34 1 12 Zweistufiges Verfahren zur Wert Benennung 45 1 13 Lebenszyklus Skizze des Produktes Software 51 1 14 Beispiel esnd Konstr kt amp u zu u eee bee a 000 54 1 15 cons Zellen Darstellung der Liste A B C 60 1 16 Grafische Darstellung einer Sequenz 70 1 17 Grafische Darstellung einer Selektion 81 1 18 Grafische Darstellung einer Iteration 90 1 19 Turtle Grafik nm Eck 222222 rennen 95 1 20 Bedinste Schleifen 5 s4a lt 4 saw 22 Ks SEES 98 1 21 Iterationskonstrukt 2220020 saw a be aes 100 1 22 B
37. 460 497 pair 125 Paket 320 423 Papert Seymour 475 477 para 439 Paradigma 141 Programmierung 141 Parameter 366 parameter 366 PARC 461 parent 475 pattern matching 449 Paulson L 270 491 905 PC Scheme 466 PDE 354 Peitgen H O 477 495 pen 475 P ter Rozsa 495 Peterson Gary 360 pict 420 Piloty R 23 495 pin over 421 Pirsig Robert M 408 495 Pitman Kent M 491 495 PLaneT 324 planet 324 Plauger P J 393 493 Pleban Uwe E 494 Pleskun Andrew R 457 495 PLT Scheme 15 Pfl ger Jorg Martin 489 Polymorphismus Kompilierung 448 Laufzeit 448 Zeitpunkt 448 Poppelstone R 69 port 473 Power LISP 466 Pr dikat 146 Pr fix Notation 23 Pratt Vaughan R 495 Premerlani W 418 496 pretty format 473 pretty print 473 Primitive 143 Primop Handler 194 print 6l 473 printf 47 3 princln eye Programmierstil 141 Programmierung daten gesteuerte Wurzel 448 Programming in the large 65 in the small 65 PROLOG 449 Property List 191 provide 320 provide contract 411 Prozeduraufruf muster gesteuerter 506 Wurzel 448 PSL 465 quasiquote 293 Quayle Mary Ann 495 Queinnec Christian 459 495 quote 30 293 R5RS 164 random gaussian 324 Rational 419 read 82 168 473 read byte 353 READ EVAL PRINT Zyklus 21 read line 353 readOnly 422 rectangle 421 Rees Jonathan 116 380 459 495 referential transparency 270 Regel K
38. 497 Mason A 166 494 Mayer Otto 494 McCarthy John 14 193 270 494 McDermott Drew V 182 318 489 McKay Donald P 494 McKim Jim 411 494 Meehan James R 182 318 489 Mellish C S 489 Merkmal 422 messages 475 Messagepassing 333 Metaobject Protocol 421 493 Miller Richard K 461 462 494 Milner R 270 491 Minsky M 190 494 MIT 14 Mitchell Richard 411 494 mixin 341 344 ML 270 Model Mitchell L 494 Modell Begriff 448 Modul 65 320 module 320 module gt namespace 324 Moon David A 327 328 390 392 459 488 494 497 498 Morse Samuel 325 Morsecode 325 Moses Joel 47 494 move 477 MrEd 469 Muchnick Steven S 494 M hlbacher J rg 223 494 M ller Dieter 114 239 494 muLISP 465 Multitasking 355 Multithreading 355 Muster gesteuerter Prozeduraufruf Wurzel 448 Mutator 146 INDEX mzlib compat 191 Nake Frieder 351 489 Namensraum 42 Namespace 42 Narayanan A 6 495 Nassi I 96 98 119 495 Naur Peter 66 Nebeneffekt 33 Nebenl ufigkeit 356 Neidl Eugen 460 497 net url 475 new 330 Newell A 14 newline 63 168 Nil s LISP 465 not 86 Notation Prafix 23 null I5 null 86 number gt string 267 object 331 Objekt 184 Begriff 447 Objektgepr gte Konstruktion 327 vergaard G 418 493 old 422 OMG 419 Omlor Stefan 492 only in 321 open input file 473 open output file 353 473 P Liste 191 Padget Julian
39. Architekturdiagramme und Verhaltensdiagramme sowie das hinter den Diagrammen stehende Repository Im Mittelpunkt steht das Klasse Instanz Modell Abschnitt 2 8 S 327 und damit das Klassendiagramm ein Diagramm das die Klas sen und ihre Beziehungen untereinander zeigt Dabei wird eine Klasse als ein Rechteck mit dem Klassennamen in der Mitte dargestellt Ab bildung 3 2 S 419 In der detaillierteren Form weist es die Slots Felder und die Methoden aus lt gt Abbildung 3 3 S 422 3 3 1 UML Symbol Klasse Einerseits um Grafik Optionen kennenzulernen andererseits zum weite ren Training des Verstehens von Konstrukten und Konstruktionen befas sen wir uns mit der Programmierung solcher Klassendiagramme Hinweis Grafik in PLT Scheme Im Umfeld von PLT Scheme gibt es eine Menge Bibliotheken zur Erzeugung 10OMG http www omg org Zugriff 20 Jan 2010 11 International Organization for Standardization http www iso org iso home htm Zugriff 20 Jan 2010 2Diagramme sind also spezielle Sichten auf das Repository und k nnen relativ frei ge staltet werden 420 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN von Grafiken Wir nutzen Slideshow PLT Figure and Presentation Tools d h require slideshow require slideshow flash require slideshow code require scheme class scheme gui base Online Dokumentation http docs plt scheme org slideshow index html Zugriff 21 Ja 2010 Die bereitgestellten
40. Aussen 12 Innen 1 2 3 4 5 n sehrite eval gt Foo 6 1 2 3 4 5 gt Map Vollzug 2 Schritt mit Bindungen Aussen 12 Innen 1 2 3 4 5 n schrite gt Bei der ersten negativen Zahl sei die Analyse der Zahlenfolge zu be enden Ist x negativ dann arbeiten wir im map Konstrukt die Fortset zung des map Konstruktes ab Damit wir spater von dieser Situation er neut die Abarbeitung starten konnen wird sie an die globale Variable KONSTRUKTIONS REST gebunden Dazu applizieren wir das map Konstrukt nicht direkt sondern ber das call cc Konstrukt eval gt define KONSTRUKTIONS REST null eval gt define Foo lambda n let Var n set Var 2 n lambda L call cc lambda Fortsetzung map lambda x 1f gt 0 x begin DisplayLn x set KONSTRUKTIONS REST Fortsetzung Dummy weil die Schnittstelle ein Argument erfordert Fortsetzung Dummy f L DisplayLn Vollzug DisplayLn 2 Schritt mit Bindungen display Aussen 290 KAPITEL 2 KONSTRUKTIONEN display Var display Innen DisplayLn L Diseplayin n 5chritet eval gt Foo 6 12 3 4 5 3 Vollzug 2 Schritt mit Bindungen Aussen 12 Innen 1 2 3 4 5 n schrite gt An die lambda Variable Fortsetzung ist die ausstehende Abarbei tung der display Konstrukte einschlie lich ihrer zugeh renden Um gebung gebunden so dass Var und L ihre bisher aktuellen W
41. D 8000 M nchen 2 Merkmale Cambridge LISP basiert auf PSL Portable Standard LISP e Emacs LISP http www gnu org software emacs manual elisp html Zugriff 22 Jan 2010 Rechnerklasse PC Hersteller Copyright Free Software Foundation Inc 51 Franklin Street Fifth Floor Boston MA 02110 1301 USA Merkmale GNU Emacs Lisp ist Grundlage und Komponente des sehr ver breiteten Editors Emacs Es ist primar beeinflusst von Maclisp und etwas von Common Lisp e Exper LISP Rechnerklasse PC Hersteller ExperTelligence Inc 559 San Ysidro Road Santa Barbara CA 93108 USA Merkmale Exper LISP enth lt eine Graphik die unter Exper LOGO bekannt wurde Diese Graphik erm glicht 3D Abbildungen Neben ExperLISP gibt es vom gleichen Hersteller einen Common LISP Compiler e Franz LISP http www ranz com Zugriff 22 Jan 2010 Rechnerklassen Mainframe und Workstation 464 ANHANG A LISP SYSTEME Hersteller Franz Inc 1141 Harbor Bay Parkway Alameda CA 94501 USA Merkmale Franz LISP ist ein sehr weit verbreiteter klassischer LISP Dialekt mit starker Common LISP Ahnlichkeit Wahrend Common LISP primar lexika lische Bindung hat bindet Franz LISP normalerweise dynamisch e Golden Common LISP GC LISP http www goldhill inc com common htm Zugriff 22 Jan 2010 Rechnerklasse PC Hersteller Gold Hill Computers Inc 163 Harvard St Cambri
42. Es bewirkt die Anwendung der EVAL Regeln Diese transformieren eine Kon stante als Datum wieder in die Rolle eines Programms In LISP sind Pro gramme und Daten gleicherma en als symbolischer Ausdruck abgebil det Als Merksatz formuliert Die Repr sentation von LISP Programmen als LISP Daten ist eine Haupteigenschaft dieser Programmiersprache Sie erm glicht das Manipulieren von Programmen durch Programme ohne die bliche Trennung in Systemprogrammierung und Anwendungspro grammierung Jeder LISP Benutzer kann sein LISP System selbst verbes sern wobei viele dieser Verbesserungen letztlich zur Verbesserung der kaufbaren LISP Systeme gef hrt haben 123 Die folgenden eval Beispiele dienen als erster Einstieg Im Zusam menhang mit der Diskussion des Umgebungskonzeptes wird das EVAL Konstrukt weiter erkl rt Beispiele zum eval Konstrukt eval gt 1 2 gt 1 2 eval gt eval 1 2 gt 3 eval gt eval eval 1 2 gt 3 eval gt define Meine Addition eval gt Meine Addition gt 12 eval gt eval Meine Addition gt 3 eval gt define Nachricht 32 KAPITEL 1 KONSTRUKTE if Antwort Meyer AG zahlt Meyer AG zahlt nicht eval gt define Antwort f eval gt eval Nachricht gt Meyer AG zahlt nicht eval gt define Anwort Ja eval gt eval Nachricht gt Meyer AG zahlt 1 1 4 Konstrukt Schnittstelle und Implementation Bisher wurd
43. F r beide F lle bed rfen wir einer Rechnerunter st tzung Die Konstruktionsgr e bestimmt welche rechnergest tzten Arbei tstechniken anzuwenden sind Bei einer kleinen Konstruktionsaufgabe ist die Spezifikation der einzelnen Verarbeitungsprozesse und der Da tenrepr sentation zu meistern Bei einer sehr gro en Aufgabe sind zu s tzlich die Fortschritte der Systemsoftware und Hardware w hrend der ben tigten Planungs und Realisierungszeit einzukalkulieren Au erdem ndern sich Anforderungen in dieser relativ langen Zeit Zu spezifizie ren ist daher eine Weiterentwicklung d h ein Evolutionskonzept Tabel le 3 10 S 406 skizziert ben tigte Arbeitstechniken in Abh ngigkeit zur Konstruktionsgr e In der Tabelle 3 10 S 406 ist der Umfang des gesch tzten Quellco detextes nur ein grober Ma stab Die Angabe des Aufwandes in Man 406 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Zu Projektbeginn Klarheit ber die Arbeitstechniken die Ziele gro gering I II erfolgver Vollzugs Definitions sprechende probleme probleme der Prinzipien Automationsauf Methoden und gabe Instrumente zur Problem Zieler Steuerungs l sung reichungs probleme eines probleme kontinuierlichen Herantastens Tabelle 3 9 Problemarten beim Spezifizieren Konstruktions Konstruk Erforderliche Arbeits Kategorie tionsgr e techniken Prinzipien LOC Methoden Instrumente zur Kleine lt 1 000 x funktionalen Strukturierung Kons
44. F cdr Foo gt lt procedure F NULL gt Ausgangspunkt einer noch starker funktionsgepragten Abbildung der cons Zelle k nnen Funktionen f r die Wahrheitswert true und fal se sein eval gt define True lambda W F W eval gt define False lambda W F F Das F cons Konstrukt ist wieder eine Funktion hoherer Ordnung Ihr R ckgabewert ist wieder eine Funktion in deren Funktionskorper die car und cdr Werte als Argumente dienen eval gt define F cons lambda x y lambda c oc x y 2 5 ABBILDUNGSOPTION FUNKTION MIT UMGEBUNG 2 7 Mit Hilfe der True und False Funktionen k nnen die Selektoren als Funktionen wie folgt definiert werden eval gt define F car lambda x x True eval gt define F cdr lambda x x False Der Wert einer F cons Applikation ist eine Funktion die wiederum von den Selektoren appliziert wird eval gt F cdr F cons 2 F cons 1 0 gt lt procedure gt eval gt F car F cons 2 F cons 1 0 eval gt F cdr F cdr F cons 1 0 procedure application expected procedure given 0 arguments were lt procedure False gt eval gt F cdr F cons 1 0 gt 0 Zum besseren Verstehen eines Selektionsvorganges reduzieren wir schrittweise die Lambda Konstrukte d h wir setzen die Werte ihrer Ar gumente im Funktionsk rper an die Stelle der entsprechenden lambda Variablen Die einzelnen Reduktionsschritte trennen wir mit dem
45. Fur die Anderung der Werte der einzelnen Slots Felder hat das define struct Konstrukt Mutatoren generiert Der Name setzt sich wie folgt zusammen set lt structur name gt lt slot gt Z B set Konto Einzahlungen Die folgenden Konstrukte zum Buchen von Ein und Auszahlungen unterscheiden sich gegen ber der L sung in Abschnitt 2 7 S 319 nur durch die generierten Selektoren und die zugeh renden Mutatoren Sie bed rfen daher keiner besonderen Erl uterung eval gt define Betrag lambda X and number X gt X 0 eval gt define Buchungsdatum 2 6 GENERIERTE ZUGRIFFSKONSTRUKTE 313 lambda X and number X gt X 100101 eval gt define Add Einzahlung lambda K E Datum Betrag cond and Konto K Buchungsdatum E Datum Betrag Betrag set Konto Einzahlungen K cons list E Datum Betrag Konto Einzahlungen K set Konto Kontostand K Betrag Konto Kontostand K Konto Kontostand K t error Keine Einzahlungen hinzugefuegt K E Datum Betrag eval gt Add Einzahlung A001 100117 50 00 gt 50 0 eval gt Add Einzahlung A001 100118 60 00 gt 110 0 eval gt Describe Konto A001 gt Inhalt des Kontos 1 Name Inhaber Leuphana Universit t Adresse Inhaber D 21339 L neburg Einzahlungen 100118 60 0 100117 50 0 0 Auszahlungen O Kontostand 110 0 eval gt define Add Auszahlung lambda K A Datum Betrag cond and Konto
46. K002 My A Liste eval gt getprop K002 Telefon gt 01626989027 Zu beachten ist die Reihenfolge der Elemente Sie weist den 2 2 ABBILDUNGSOPTION LISTE 195 letzten Wert f r die Eigenschaft Telefon aus jedoch aufgrund des ersten putprop f r Telefon als letztes P Listen Element Neue Eigenschaften werden vorn eingef gt Die Konstruktion mit P Listen birgt die Gefahr ungewollter Nebenef fekte Das folgende Beispiel zeigt die Unterschiede der Effekte Reich weite der P Liste zu einer lokalen A Listendefinition In beiden F llen konstruieren wir ein Lexikon Foo das zun chst die Attribute Key 1 Key 2 und Key 3 enth lt Der Wert von Key 1 wird modifiziert Da nach wird auf der top level Ebene mit dem gleichen lokalen Namen eine Key 4 Definition hinzugef gt Beispiel Assoziationsliste In PLT Scheme mit Sprache R5RS eval gt define Lokale A Liste lambda let A Liste Key 1 value 1 Key 2 value 2 Key 3 value 3 set cdr assq Key 1 A Liste list value neu A Liste eval gt define Foo Lokale A Liste eval gt Foo gt key 1 value neu key 2 value 2 key 3 value 3 eval gt define A Liste Key 4 value 4 eval gt define Foo Lokale A Liste eval gt Foo gt key 1 value neu key 2 value 2 key 3 value 3 Beispiel Eigenschaftsliste In PLT Scheme mit Sprache Module und module compat mzscheme eval gt define
47. Mischen von verschiedenen Flavors erh lt man einen neuen Fla vor Dabei schmeckt man beim Zusammenmischen die einzelnen Komponenten bis hin zur Systemwurzel Vanilla flavor Selbst kleine LISP Implementationen erm glichen den Umgang mit Klassen und Instanzen Ohne gro en Aufwand kann ein LISP System f r eine objektgepr gte Programmierung erweitert werden z B 53 9 25 107 62 Entstanden ist daher eine Vielfalt von LISP Erweite rungen Sie weisen wesentliche Unterschiede in ihren Konstrukten und in ihrer Terminologie auf Begriffe wie Objekt Klasse Instanz Metho de oder Funktion werden unterschiedlich gehandhabt Diese Sprach und Konstruktevielfalt war Veranlassung einen leistungsf higen Stan dard zu schaffen Die amerikanischen Standardisierungsbem hungen haben zum Common LISP Object System kurz CLOS gef hrt AN SI X3J13 und 20 In Abbildung 2 22 S 327 sind die CLOS Bausteine genannt Die CLOS Charakteristika zeigt Abbildung 2 23 S 328 Mit dem define struct Konstrukt ist eine Klasse Struktur auf der Basis einer existierenden Klasse definierbar gt Abschnitt 2 6 3 314 Vererbt werden dabei die Slots einer Klasse Ein wesentliches Lei stungsmerkmal eines Klassen Instanz Modells sind seine Optionen der Vererbung d h die M glichkeit neue Klassen durch R ckgriff auf die Eigenschaften von mehreren Klassen zu definieren Abbildung 2 23 S 328 Ein weiteres Beurteilungskriterium ist der Zeitpu
48. Notation mit UML ss sess 200 wa 46446 Baader 3 3 1 UML Symbol Klasse a Ge 6S 04 wurden 3 3 2 Assoziation und Vererbung 2 c 2222 er 00 0 3 3 3 Zusammenfassung UML se s ea ceri cipean 3 4 Pr sentation Slideshow aooaa 00000 eae 3 4 1 Pl doyer f r LISt Processing 3 4 2 Zusammenfassung Slideshow aoaaa aaa 3 5 Prim r Objekt Orientierung saoo e 3 9 1 class versus A Lisle i credendi ada Fae ba es 3 5 2 Zusammenfassung Prim r Objekt Orientierung 30 DIEDUch un an ae de ae we Dee EEE INHALTSVERZEICHNIS A LISP Systeme A 1 Rechner f r LISP Systeme A 2 Software 22 22er nenn A 3 PLT Scheme bersicht A 3 1 Systemarchitektur A 3 2 Ausgew hlte Scheme Konstrukte B Literatur C Index 457 460 462 467 467 469 485 499 10 INHALTSVERZEICHNIS Kapitel 1 Konstrukte ie jede Sprache so dient auch eine formal isiert e Sprache der Kommunikation Aufgabe einer Programmiersprache ist die Kom munikation zwischen Menschen ber Texte Botschaften die ein Rech ner als Arbeitsanweisungen interpretieren und ausf hren kann For mulierungen in einer Programmiersprache haben einerseits Menschen andererseits Rechner als Adressaten Jeder Text in einer Programmiersprache hat zumindest im Erstel lungsprozess Entwurfs Formulierungs Test Zyklus seinen Kon strukteur als Kommunikationspartner Dar ber hinau
49. O 158 KAPITEL 2 KONSTRUKTIONEN 2 1 4 Zusammenfassung Abstraktionsebene Der Denkrahmen des Konstrukteurs allgemein als Paradigma bezeich net wird bestimmt von charakteristischen Konstruktionen die z B im perativ funktions oder objekt gepr gt sind Ein Paradigma umfasst ele mentare Konstrukte Verkn pfungs und Abstraktionsmittel Wir betrachten eine Konstruktion auf den verschiedenen Abstrakti onsebenen als einen Verbund von 1 Konstruktor 2 Selektor incl Pr sentator 3 Pr dikat und 4 Mutator incl Destruktor Von diesem Verbund fordern wir Die Bausteine die ein Konstruktor zusammenf gt m ssen von Pr dikaten erkannt und durch Selektoren ohne Verlust wiedergewonnen werden k nnen Charakteristisches Beispiel f r Abschnitt 2 1 Formular Hinweis Zur Nutzung der Mutatoren S 164 eval gt Abbildung eines Formulars Untere Abstraktionsebene define Bilde Leeres Formular lambda list KOPF TEXT FUSS FORM eval gt Pradikate define Kopf lambda x string x eval gt define Text lambda x string x eval gt define Fuss lambda x string x eval gt define Leeres Formular lambda x and pair x eq list ref x 0 KOPF eq list ref x 1 TEXT eq list ref x 2 FUSS eq list ref x 3 FORM eval gt Nachst hohere Abstraktionsebene Konstruktor define Bilde Formular lambda
50. Sie die nen auch zur Manipulation der Variablen und des Abbruchtestes Der R ckgabewert des do Konstruktes wird nur durch die Endebe handlung definiert Die Definitionsbereiche m ssen nicht zwingend einen symbolischen Ausdruck aufweisen Das do Konstrukt ist wie folgt definiert eval gt do 4 lt variable gt lt init_sexpr gt lt iter_sexpr gt lt exit gt lt exit_sexpr gt lt body_sexpr gt Anhand von zwei Beispielen zeigen wir die Arbeitsweise und Wirkung des do Konstruktes Zun chst bilden wir eine Z hlschleife ab indem wir den Satz LISP hat ein dia logisches Konzept siebenmal schreiben Danach summieren wir alle Elemente einer Liste vorausge setzt es handelt sich um Zahlen Beispiel Siebenmal dieselbe Zeichenkette ausgeben L sung 1 Z hlschleife mit Verarbeitung im lt body_sexpr gt eval gt do Zaehler 7 Zaehler 1 0 Zaehler print LISP hat ein dia logisches Konzept newline gt LISP hat ein dia logisches Konzept LISP hat ein dia logisches Konzept 92 KAPITEL 1 KONSTRUKTE LISP hat ein dia logisches Konzept LISP hat ein dia logisches Konzept LISP hat ein dia logisches Konzept LISP hat ein dia logisches Konzept LISP hat ein dia logisches Konzept eval gt L sung 2 Z hlschleife mit Verarbeitung im lt iter_sexpr gt eval gt do Zaehler 7 begin print LISP hat ein dia logisches Konzept newline Zaehler 1
51. Spezifiziert System Aussage or Spezifiziert zu erf llende Leistung Aussage Spezifiziert quantitative Eigenschaft Aussage Spezifiziert qualitative Eigenschaft Aussage Realisierbar lambda 410 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Anforderung Duldbare Abweichung cond lt Bestimmung SOLL IST Abweichung Feststellen IST Verhalten bezogen auf SOLL Planvollzug Planung Anforderung Duldbare Abweichung Duldbare Abweichung t Modifizierbar Anforderung Realisierbar Modifikation Anforderung Duldbare Abweichung Modifizierbar Duldbare Abweichung Realisierbar Anforderung Modifikation Duldbare Abweichung t and Anforderung Anforderung Realisierbar Anforderung Duldbare Abweichung Die einzelne Anforderung mag das Pr dikat Vorgabe erf llen im Zusammenhang mit anderen jedoch nicht Naturgem gibt es konkur rierende und sich widersprechende Vorgaben Vorrang und Kompromi s entscheidungen sind daher im Rahmen der Spezifikation zu treffen Ei ne pragmatische Vorgehensweise beachtet bei den einzelnen Spezifikati onsschritten vorrangig kritische Vorgaben und gew hrleistet die anderen quasi nachtr glich durch gezielte Modifikationen Die kritische Vorgaben intuitiv zu erkennen ist die Kunst des erfahrenen Konstrukteurs Ziel der Spezifikation ist es die Vorgaben so auszuarbeiten dass sie durch passende Verkn pfung
52. Symbol eval gt Typbestimmung OK gt Unbekannt Typbestimmung list 1 ae Paar eval gt 2 7 Module Lokaler Namensraum Ein Namensraum Umgebung stellt Symbol Wert Assoziationen be reit Abschnitt 12 S 42 Der gleiche Name d h das gleiche Sym bol kann in unterschiedlichen Umgebungen zu verschiedenen Werten f hren wie mittels Programm 2 8 S 298 im vorhergehenden Abschnitt ausf hrlich gezeigt wurde Der Namensraum ist ein zweckm iges Kon struktionsmittel um Namenskonflikten vorzubeugen Werden fremde Kon strukte importiert oder arbeiten mehrere Programmierer gemeinsam an einer Probleml sung dann besteht die Gefahr dass f r verschiedene Konstrukte die gleichen Namen verwendet werden Das Einbetten je der Teill sung in einen eigenen Namensraum verhindert das ungewollte 320 KAPITEL 2 KONSTRUKTIONEN Uberschreiben einer Symbol Wert Assoziation Der Namensraum bernimmt eine Abschottungsaufgabe Er verpak kt eine Teil LOsung zu einem Paket Ein Paket auch als Modul bezeich net stellt somit eine Sammlung von Symbol Wert Assoziationen bereit Der Paketname ist ein Abstraktionsmittel Er erm glicht diese Samm lung als eine Einheit zu benutzen Module sind mit Modulen kombinierbar Sie k nnen aus schon exi stierenden Modulen konstruiert werden Dazu kann ein Modul mit an deren Modulen kommunizieren Diese Kommunikation bedingt dass Module ber gemeinsame Namen verf
53. Was soll das Sy Aussagen sind aus Regeln abgeleitet oder Anforderungen werden beim Benutzer nachgefragt 2 Anforderun Was ist das Sy Das Dialogsystem Diagnose ist ein Pro gen an des ferti stem dukt fur den Einsatz bei mehr als 100 ge Produkt Kfz Betrieben 3 Anforderun Was sind die Diagnose setzt das Betriebssystem MS gen zur Syste Einsatzbedin Windows Version 7 voraus mumgebung gungen 4 Anforderun Was ist der Diagnose verk rzt die Fehlersuchzeit gen an die Ziel Bewertungshin zumindest bei angelernten Kr ften struktur tergrund 5 Anforderun Was sind die Diagnose Version 1 0 ist innerhalb von gen zur Projekt Ressourcen f r 3 Monaten mit 2 Mann zu entwickeln durchf hrung das Projektma nagement Tabelle 3 8 Kategorien von Anforderungen gentliche Konstruktionsproblem sein Das Ziel und die Arbeitstechnik seien klar das Problem liegt in der Durchf hrung Vollzugsproblem Ausgehend von unserem Vor Wissen ber die erfolgversprechenden Arbeitstechnik und der Klarheit der Zielkriterien sind verschiedene Pro blemfelder zu unterscheiden lt gt Tabelle 3 9 S 406 Unsere Konstruktionsaufgabe sei ein Vollzugsproblem Feld I 1 in Tabelle 3 9 S 406 Die erfolgversprechende Arbeitstechniken zur Spe zifikation beziehen sich damit auf 1 eine schrittweise Verfeinerung vertikale Ebene und 2 eine modulare Strukturierung horizontale Ebene von Anforderungen
54. Wenn die Struktur nur aus dem zu erset zenden Wort Objekt besteht dann ist die Losung bekannt und wir brauchen nur Ersatz zuruckzugeben Ist die Struktur keine Liste sondern ein elementares Element z B eine Zahl oder ein Symbol und ist dieses Element nicht gleich dem Objekt dann ist die Struktur selbst die Losung Anders formuliert Ist die Struktur ein Atom lt gt Tabelle 1 9 S 67 und trifft nicht der erste triviale Fall zu dann ist die Struktur der R ckgabewert Ob ein Atom vorliegt betrachten wir als Frage ob keine Punkt Paar Struktur Abbildung 1 15 S 60 vorliegt und zwar mit dem Konstrukt pair Betrachten wir das erste Element von Struktur dann kann es ein Atom oder wieder eine Liste sein F r den Fall eines Atomes haben wir die Losung mit der Definition der trivialen Falle abgedeckt Fur eine Liste ist der Ersetzungsvorgang sowohl fiir ihr erstes Element als auch ftir ihre Restliste zu vollziehen Das Ergebnis ist die Verkn pfung der Ersetzung im ersten Element mit der Ersetzung in der Restliste Diese Verkn pfung ist mit dem Konstruktor cons abbildbar Wir k nnen die Ersetzung in ei ner komplexen Struktur auf zwei einfachere Probleme zur ckf hren 1 auf die Ersetzung im ersten Element von Struktur und 2 auf die Ersetzung im Rest von Struktur Die Gesamtl sung ist die Verkn pfung der beiden Teill sungen Wir de finieren daher eval gt define Ersetzung lambda Objekt Ersatz Struktur cond eq Objek
55. and pair Liste eq car Liste null list ref Liste 1 eval gt define Variable lambda Liste and pair Liste eq car Liste list ref Liste 1 Wir benotigen Selektoren und Mutatoren fur den Wert einer Mu stervariablen Wir verwenden hier die Eigenschaftsliste des Symbols lt gt Abschnitt 2 2 3 S 191 um abgedeckte Elemente zu speichern Die Ent scheidung fiir die Eigenschaftsliste verhindert einerseits das Uberschrei ben bestehender Symbol Wert Bindungen und dient andererseits zum Training der P Listen Konstrukte Die Selektoren und den Mutator defi nieren wir wie folgt eval gt define Get Match Variable lambda Liste list ref Liste 1 eval gt define Get Match Value lambda Symbol getprop Symbol Match Value eval gt define Set Match Value lambda Symbol Wert 2 4 ABBILDUNGSOPTION ZEICHENKETTE UND SYMBOL 2953 putprop Symbol Match Value Wert t Die Erweiterung um Mustervariablen bedingt einige Anpassungen am obigen Simple Match Konstrukt Abschnitt 2 4 1 S 239 Zur Erl uterung sind die betroffenen Anderungsstellen in der folgenden Wie derholung des Simple Match Konstruktes markiert eval gt define Simple Match lambda Muster Liste cond and null Muster null Liste t null Liste null cdr Muster eg car Muster Ht and Erg nzung A Varibale als letztes Musterelement dann We
56. before its definition KONTEN eval gt define K3 make Konto 3 Software AG Darmstadt eval gt Get Konto K3 gt f f eval gt Add Konto K3 Konto Adresse Inhaber Get Konto K3 gt Darmstadt eval gt Mit dem require Konstrukt k nnen wir jedoch die Konten Da tenbank also KONTEN auch auf top level Ebene importieren 324 KAPITEL 2 KONSTRUKTIONEN eval gt require Konten Datenbank eval gt KONTEN gt struct Konto 3 Software AG Darmstadt 0 0 0 struct Konto 2 Siemens AG Munchen 0 0 0 struct Konto 1 Leuphana Universit t L neburg 000 Allerdings ist das Symbol KONTEN vor Ver nderungen auf der top level Ebene gesch tzt eval gt set KONTEN 7 gt ERROR set cannot mutate module required identifier in KONTEN Mit der Kenntnis des Namensraums k nnen wir jedoch Ausdr cke im Namensraum evaluieren so dass wir die Sperre austricksen k nnten eval gt eval set KONTEN cons list A KONTEN module gt namespace Konten Datenbank eval gt KONTEN gt A struct Konto 3 Software AG Darmstadt 0 0 0 struct Konto 2 Siemens AG Munchen 0 0 0 struct Konto 1 Leuphana Universit t L neburg 0 0 0 Klar ist eine solche Durchbrechungung des Modul Schutzraumes w re keine zweckm ige Ma nahme Wir nutzen Module ja gerade we gen ihres eigenen Namensraumes Exkurs PL
57. define myOr lambda arg 1 arg 2 condtarg 1 larg 2 eval gt myOr Ok Klar gt Ok eval gt myOr f Klar gt Klary eval gt myOr f 1 2 KOMBINIEREN VON KONSTRUKTEN 85 Bei dieser Definition nutzen wir die M glichkeit eine Klausel nur mit dem symbolischen Ausdruck f r das Pr dikat zu definieren lt gt Ab schnitt 1 2 1 S 53 Ist sein Wert ungleich false hat das gesamte cond Konstrukt diesen Wert Solche Notationen k nnen ftir Denk bungen formuliert werden Wir sollten jedoch genau pr fen wann sie im Prax iseinsatz zweckm ig sind Exkurs and bzw or und cand bzw cor Die obigen Definitionen verweisen auf die in der Informatik gebr uchliche Unterscheidung zwischen and bzw or und cand bzw cor Bei and bzw or sind beide Argumente auszuwerten auch wenn der logische Wert sich aus dem ersten ergibt true bei or bzw false bei and Grund M gliche Nebeneffekte der Operanden sollen ausgef hrt werden Bei cand und cor will man diese m glichen Nebeneffekte vermeiden z B damit folgende Formulierung zu keiner Division durch 0 f hrt eval gt define x 0 eval gt cor 0 x gt 1 x 7 bei x 0 kommt der zweite Teil nicht zur Ausf hrung F r die logische Verkn pfung von a mit b k nnen wir definieren cand cond a b t and cond a b b t cor cond a t t b or cond a b t b t t Die in PLT
58. elementaren grafischen Bausteine wie z B eine horizontale Linie eine vertikale Linie ein Zirkel ein Rechteck oder ein Text Konstrukt lassen sich vertikal z B vc append und horizontal z B hc append aneinander f gen eval gt lt prefix gt append lt gap gt lt picts gt mit lt prefix gt he horizontal auf center Linie hb horizontal auf base Linie ht horizontal auf top Linie vc vertikal auf center Linie vl vertikal auf left Linie vr vertikal auf right Linie Abstand der Grafikobjekte untereinander Grafikobjekte die pict erf llen lt gap gt lt picts gt Beispiel Drei Kreise nebeneinander mit unterschiedlichen Durchmes sern d 50 0 d 100 0 d 200 0 schweben 10 Einheiten ber einer horizontalen Linie 350 0 eval gt vc append 10 hb append 0 circle 50 0 circle 100 0 circle 200 0 hline 350 0 0 gt Bild mit Kreisen Abbildung A 1 S 468 Das text Konstrukt erzeugt aus einer Zeichenkette string ein Gra fikobjekt pict mit Hilfe einer Instanz aus der Klasse ont Dabei kann der erzeugte Text auch gedreht werden 4 Parameter Ein Recht eck mit dem Klassennamen Konto ist im folgenden Chart Konto Konstrukt definert 3 3 NOTATION MIT UML 421 Chart Konto3 Konstrukt eval gt define Chart Konto let MyFont make object font 40 modern normal bold vc append hline 300 0 0 0 hc append 55 vline 0 0 200 text Kont
59. eval gt define Konto class object define Kontostand 0 super new define public get Kontostand lambda Kontostand define public abheben lambda Betrag sleep 0 3 cond lt Betrag Kontostand set Kontostand Kontostand Betrag 3 Yoah Bar David bemerkt dazu The mutual exclusion problem was formally defined by Edsger Dijkstra in 1965 Since then many solutions were published one of them is a simple solution by Gary Peterson in 1981 Information on the problem known solutions and related problems can be found in many books and web sites about distributed algorithms or operating systems http bardavid com mead Zugriff 23 Jan 2010 Eine Petri Netz Darstellung zur Mutex Exclusion findet man beispielsweise unter http www cs adelaide edu au users esser mutual html Zugriff 23 Jan 2010 2 9 KOMMUNIKATION 361 Printer Neuer Kontostand s EUR n Kontostand t printf Keine Deckung n define public einzahlen lambda Betrag sleep 0 1 set Kontostand Kontostand Betrag printi Neuer Kontostand s EUR n Kontostand Klar ist dass ohne Threads bei den Kontobewegungen die Reihenfol ge zwischen abbuchen und einzahlen nicht beeinflusst wird Beim folgenden Fall wird daher auf keine Deckung verwiesen obwohl gleich danach eine ausreichende Einzahlung erfolgt eval gt define A001 new Konto eval gt define Batch Bewegungen lambda
60. gt Telefon 01626989027 eval gt assq Telefon K001 gt Telefon 01626989027 Die M glichkeit A Listen mit Attributen zu definieren die mehrfach vorkommen k nnen setzt eine problemgerechte Festlegung f r den Ver bund von Konstruktoren Selektoren Pr dikaten und Mutatoren voraus Beispielsweise eignen sich A Listen mit Multiplizit t zum Abbilden von aktuellen Werten gemeinsam mit ihren vorherigen Werten d h ihrer Historie Im Fall der globalen Variable K001 bleibt die alte Telefon nummer bestehen Existierende Konstrukte greifen mit ihrem Selektor Telefon ohne nderung auf die aktuelle Telefonnummer zu Die Hi storie d h die zun chst unter dem Attribut Telefon gespeicherte Te lefonnummer kann z B f r Revisionszwecke ber einen entsprechend definierten Selektor wieder gewonnen werden Sind die Schl ssel einer A Liste Symbole und kommt jeder Schl ssel nur einmal in der A Liste vor dann bietet sich als Alternative die Eigen schaftsliste an Abschnitt 2 2 3 S 191 Sind die Schl ssel nicht nur Symbole dann ist in modernen LISP Systemen die Hash Tabelle eine Al ternative F r gro e A Listen bieten sie eine Effizienzsteigerung da die Zugriffszeit auf eine Assoziation quasi konstant ist Wir skizzieren die Hash Option f r PLT Scheme im folgenden Exkurs 2 2 ABBILDUNGSOPTION LISTE 189 Exkurs Hash Tabelle in PLT Scheme hashtable ist eine Datenstruktur die Schltissel Keys mit Werten Va
61. lektoren und Pr dikate zusammen Es hat folgende Struktur eval gt define Ableitungsfunktion lambda Mathematischer Ausdruck dx letrec Pradikate f r Konstante und Variable Konstante Variable Gleiche Variable Pr dikate Selektoren und Konstruktoren Eur die Summenregel Summe Erster Summand Zweiter Summand Bilde Summe Vereinfache Summe Pradikate Selektoren und Konstruktoren Eur die Produktregel Produkt Multiplikand Multiplikator 2 Bilde Produkt Vereinfache Produkt Ableitungsregeln Ableiten lambda Formel Variable cond Fallunterscheidung f r die anzuwendende Ableitungsregel Anwendung der lokalen Funktion Ableiten Mathematischer Ausdruck dx Beim Aufruf des Konstruktes Ableiten ist die 1ambda Variable For mel an den abzuleitenden mathematischen Ausdruck gebunden Mit Hil fe der Pr dikate Summe und Produkt wird erkannt ob es sich um eine Summe oder ein Produkt handelt In diesen F llen ist der Wert von Formel ein zusammengesetzes Konstrukt dessen einzelne Teile zur An wendung der entsprechenden Ableitungsregel ben tigt werden Im Fall 152 KAPITEL 2 KONSTRUKTIONEN der Summe sind deshalb die Selektoren Erster Summand und Zwei ter Summand definiert F r das Produkt sind es die Selektoren Multi plikand und Multiplikator Die Benennung der lokalen Funktio nen und Komm
62. lt a gt Kontotyp lt a gt Name des Kontoinhabers lt a3 gt Datum letzte Buchung lt a gt Zur Konstruktion der Selektoren die auf der Basis A Liste arbeiten k n nen wir eingebaute Zugriffskonstrukte nutzen z B in Scheme assoc assq oder assv Solche eingebauten Konstrukte sorgen f r eine ef fiziente Selektion da sie die jeweiligen Implementationsdetails nutzen k nnen Ihre prinzipielle Funktion verdeutlicht das selbstdefinierte Kon strukt Mein assq eval gt define Mein assq lambda Key A Liste cond null A Liste null eq Key caar A Liste car A Liste t Mein assq Key cdr A Liste In dem Konstrukt Mein assq fu t die Vergleichsoperation zwischen dem Wert an den Key gebunden ist und dem ersten Element einer Sub liste auf dem eq Konstrukt Unterstellen wir dass der Wert von Key nicht nur ein Symbol sein kann sondern z B eine Liste dann ist f r die Vergleichsoperation das equal Konstrukt zu verwenden In solchem Fall wollen wir die Subliste selektieren deren erstes Element gleich der Liste von Key ist Da hier Gleichheit nicht Identit t bedeutet d h nicht die identischen cons Zellen f r beide Listen voraussetzen soll ist equal statt eq zu w hlen Die Benutzung der eingebauten Selekto ren f r A Listen setzt daher die Kenntnis der Vergleichsoperation voraus 186 KAPITEL 2 KONSTRUKTIONEN Passende Selektoren ftir das Kontobeispiel konnen mit dem Mein assq K
63. ndig abgeschlossen ist Die Ausf h rungsdauer und damit die definierte Wartedauer der anderen Zugrei fer darf dabei keine Rolle spielen Ben tigt wird ein Monitor der den Zugriff durch die Verwaltung einer Sperre bzw einer Freigabe steuert d h eine serialisierte Methode ist explizit zu sperren bzw freizugeben Dazu wird ein zus tzliches Objekt das analog zu einer Rot Gr n Ampel arbeitet erforderlich Der ben tigte Serialisierer kann mit Semaphoren deutsch Signal mast definiert werden Ein Semaphore hat einen internen Z hler Wenn der Z hlerwert gleich Null ist so blockiert der Semaphore die Ausf hrung des Threads solange bis ein anderer Thread den Z hler inkrementiert d h das semaphore post Konstrukt evaluiert Ein solcher Serialisierer synchronisiert die Threads einer Gruppe Da die Anzahl der Gruppenmitglieder nicht bekannt ist nutzen wir hier die M glichkeit an eine 1ambda Variable beliebig viele Werte zu binden wie folgt eval gt define a lambda args args eval gt a d e gt d e 2 9 KOMMUNIKATION 363 Auf der Basis von make semaphore semaphore wait und se maphore post definieren wir nun die notwendige Steuerungsampel eval gt define Synchronisation lambda let Control Signal make semaphore 1 lambda fun let Serialized Function lambda args semaphore wait Control Signal let Value apply fun args semaphore post Control Signal Value
64. number car liste set Akkumulator Akkumulator car liste t Naechstes Listenelement eval gt Summe der Zahlen A 3 B 1 C 2 gt 6 Losung 2 Addieren der Zahlen im Iterationsteil des do Konstruktes eval gt define Summe der Zahlen lambda 1 do liste 1 cdr liste Akkumulator 0 Hilfs variable fur das Ergebnis null liste Akkumulator Ende bedingung cond number car liste set Akkumulator Akkumulator car liste t Naechstes Listenelement eval gt Summe der Zahlen 1 2 3 4 A B C D gt 10 Hinweis do Implementation Anhand der do Implementation wird deutlich dass die Iteration mit dem do Konstrukt sich auf die Rekursion mittels letrec abst tzt Wie das let Konstrukt S 72 so ist auch das do Konstrukt in PC Scheme als Makro Konstrukt realisiert Analog zum begin0 Makro Abschnitt 13 S 78 wird auch hier eine lokale Variable generiert Mit Hilfe des EX PAND MACRO Konstruktes ist das Ergebnis des expandierens darstellbar Dabei formulieren wir die lt sexprs gt der obigen do Definition als Zei chenketten PC Scneme eval gt define Foo EXPAND MACRO ide ied eal Imit Ssexprs level Aber Sexpr gt Ven Tey 2 Init sexpr gt Neve2 Alter sexpr gt or eq V 1 ENDE eq V 2 ENDE eexit Sexpr a gt exit sexpr b gt lt body sexpr gt PC Scheme eval gt 94 KAPITEL 1 KONSTRUKTE FOO gt Letre
65. r die 1 ambda Variablen eval gt define Kunden gt Firmen Kurzname Ersatz lambda X Y cond length X 1 cond length Y 1 list ref Y 0 t UNBEKANNTER KURZNAMBE t list ref X 1 eval gt Kunden gt Firmen Kurzname Ersatz Kunde 1 UNBEKANNTER KURZNAME gt SAG L sung B e Funktionsname und Namen der lambda Variablen sind gleichbe teiligte Informationstr ger eval gt define Firmen Kurzname lambda Kunde Ersatz Kurzname cond length Kunde 1 cond length Ersatz Kurzname 1 list ref Ersatz Kurzname 0 t UNBEKANNTER KURZNAMB t list ref Kunde 1 eval gt Firmen Kurzname Kunde 1 UNBEKANNTER KURZNAME gt SAG Problem 2 Einbeziehen von konstruktionsbedingten Informationen Die Namen in den L sungen A und B enthalten keine Typ Aussagen So ist nicht erkennbar dass die Funktion ein Selektor ist und ihr erstes Argument eine Liste sein muss L sung C e Pr fix des Funktionsnamens verweist auf den Typ Selektor e lambda Variablen geben Informationen in Bezug auf die zul ssigen Argumente 3 1 TRANSPARENZ DER DOKUMENTATION 383 eval gt define Selektiere Firmen Kurzname lambda Liste Ersatz String cond length Liste 1 cond length Ersatz String 1 list ref Ersatz String 0 t UNBEKANNTER KURZNAME t list ref Liste 1 eval gt Selektiere Firmen Kurzname Kunde 2 UNBEKANNTER KURZNAME gt W
66. r eine solche Kommunikation spielt zur Zeit das Hypertext Transfer Protocol HTTP eine dominierende Rolle Klar ist auch bei der hohen Leistungsf higkeit der blicherweise genutzten Rechner ist eine Paral lelverarbeitung oft sinnvoll Stets sind berlegungen angebracht die Aufgabe so in Teile zu gliedern dass diese auf mehrere Rechner im Netzwerk und oder auf dem betroffenen Rechner parallel abgearbeitet werden k nnen Beide Aspekte werden im Folgenden vertieft Zun chst greifen wir mittels HTTP auf einen Web Server zu Abschnitt 2 9 1 S 352 Dann behandeln wir das Thread System und zeigen dabei die Synchronisation von nebenl ufigen Prozessen Abschnitt 2 9 2 S 355 2 9 1 HTTP Kommunikation Um auf ein Dokument im Web zugreifen zu k nnen muss sein Uniform Resource Locator URL in Form einer Zeichenkette String bekannt sein Dieser String wird in eine URL Struktur lt ur1 gt konvertiert und zwar mit dem Konstrukt string gt url Dann l sst sich das Dokument mit tels get pure port oder get impure port Konstrukt ffnen Das get pure port Konstrukt liefert nur den Dokumenteninhalt Das get impure port Konstrukt zusatzlich auch den Header des Web Doku mentes Um das Hypertext Transfer Protocol HTTP so nutzen zu konnen ist die Bibliothek net ur1 erforderlich d h eval gt require net url 2 9 KOMMUNIKATION 353 Beispiel Zugriff auf http www hegb de eval gt define MyInput Port
67. selector gt nicht eva luiert wird Die Art des Vergleiches wird vom Typ des lt selector gt Ausdruckes bestimmt Ist lt selector gt eine Liste dann wird jedes Ele ment mit dem Wert von lt form gt verglichen Ist lt selector gt ein Sym bol au er else dann wird die Identit t bzw Wertgleichheit bei Zahla tomen Strings etc gepr ft Ist lt selector gt das Symbol else dann ist der Vergleich sofort erfolgreich Bei einem erfolgreichen Vergleich stoppt der Vergleichsprozess und die zugeh rende Sequenz der lt sexpr gt wird evaluiert Der Wert des case Konstruktes lt value gt ist der Wert des zuletzt evaluierten Ausdrucks entspricht der Definition des cond Kon struktes Beispiel case und cond Konstrukt eval gt define Zustimmung lambda case read J Ja Jawohl Jawoll Y Yes Klar Zustimmung Gewiss sicher freilich selbstredend selbstverstaendlich allerdings gern X T true oui quit si t else f eval gt Zustimmung Jawohl Eingabe gt t Wert eval gt define Zustimmung lambda let Antwort read cond or eq Antwort J eq Antwort Ja eg Antwort Jawohl eq Antwort Si t t Hinweis case und cond Konstrukt Beide Konstrukte basieren auf dem if Konstrukt Sie sind eine syntak tische Vereinfachung In PC Scheme beispielsweise zeigen die folgenden EXPAND MACRO Anwendungen wie case und cond dort als Makros de finier
68. ste mit dem Namen Liste eroeffnete Knoten Knoten die schon berpr ft wurden ob sie der Zielknoten sind speichern wir als einfache Liste mit dem Namen Liste geschlossene Knoten Um von den Nachfolgern eines expandierten Knotens diejenigen Knoten streichen zu k nnen die schon bearbeitet wurden definieren wir eine Liste mit dem 2 2 ABBILDUNGSOPTION LISTE 199 eval gt define Buero begin 7 7Koordinaten der Knoten p tprop A Ort 8 5 11 5 p tprop B Ort 15 5 10 putprop C Ort 8 5 6 5 p tprop D Ort 7 18 5 5 5 putprop E Ort 14 6 5 putprop F Ort 15 5 4 5 putprop G Ort 15 5 3 putprop H Ort 0 5 0 5 5 p tprop UD Ore 176 5 Erreichbare Knoten und Ihre Entfernungen putprop A Nachfolger HAC 5 B 8 571 putprop B Nachfolger A 8 5 E 4 5 putprop C Nachfolger D 1 A 5 E 5 5 H 14 putprop D Nachfolger C 1 putprop E Nachfolger ING B35 AF 2 B 225 U2 putprop F Nachfolger PTS 23 1G dey putprop G Nachfolger CCF 15 H 1735 putprop H Nachfolger PAC 12 40 145 9 putprop U Nachfolger E 3 Ende Legende Abbildung 2 12 S 200 Tabelle 2 5 Programm Hauspoststationen Knoten als P Listen abge bildet 200 KAPITEL 2 KONSTRUKTIONEN l 1 Sachbear beiter B l l l I l l
69. sung S 449 7 7Simples OO Beispiel Schreibtisch mit 4 Schubladen Version 1 0 module Desk scheme provide MyDesk define Desk class object init w 1 h d define Drawer class object init w 1 h define Width w define Length 1 define Height h define Drawn 0 define public get Width lambda Width define public get Length lambda Length define public get Height lambda Height define public get Drawn lambda Drawn define public push lambda set Drawn Drawn 1 define public pull lambda set Drawn Drawn 1 452 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN super new define Width w define Length 1 define Height h define Drawers make vector d new Drawers w w d 1 1 d h B d define public get Width lambda Width define public get Length lambda Length define public get Height lambda Height define public get Drawer lambda n vector ref Drawers n super new define MyDesk new Desk w 50 0 1 70 0 h 80 0 d 4 End Module Desk eval gt require Desk eval gt send send MyDesk get Drawer 0 pull eval gt send send MyDesk get Drawer 0 push eval gt send send MyDesk get Drawer 0 get Drawn gt 2 Unstrittig ist das mit etwas Aufwand die imperativ gepr gte L sung noch verbessert werden k nnte H lle um die A Liste D
70. ufige Ursachen Nicht selten f hrt daher erst die Fehlersuche und Fehlerkorrektur zu einem tieferen Verst ndnis des Problems und seiner L sung Die folgenden fehlerhaften Konstrukte bieten daher die M g lichkeit die bisher skizzierte LISP Welt nochmals zu durchdenken Es handelt sich um klassische Anf ngerfehler die gleicherma en als Fl chtigkeitsfehler den LISP Profis unterlaufen In der Praxis wird jeder unter derartigen Denkbeulen selbst leiden m ssen ehe er die Sou ver nit t gewinnt um solche Fehler spontan zu erkennen und l chelnd beseitigen zu k nnen Fehler bei der Funktionsdefinition Gew nschtes Konstrukt eval gt define Verdopplung lambda Zahl Zahl 2 106 KAPITEL 1 KONSTRUKTE Begrenzte Eintreffer ET mit lokalen Fuktionen eval gt define ET Auszahlung buchen let B1 lambda print Ist die Kontonummer angegeben J N read B2 lambda print Ist die Kontonummer kleiner gleich 40000 J N read B3 lambda print Ist der Betrag groesser gleich 50 00 EUR J N teed B4 lambda print Ist der Zweck angegeben J N read Al lambda print Dem Chef vorlegen A2 lambda print Zurueck an die Fachabteilung schicken A3 lambda print Umkontieren auf Konto SONSTIGES A4 lambda print Vorgang an Abteilung 2 abgeben A5 lambda print Buchung vollziehen sr Regeln lambda co
71. x y let x Symbol Explode x y Symbol Explode y do x Sym x Symbol cdr x Sym y Sym y Symbol cdr y Sym Wert t or not Wert null x Sym Wert if and y Sym string lt symbol gt string car x Sym symbol gt string car y Sym set Wert t set Wert eva gt x lt y Dick Dic gt ERROR Car expects argument of type lt pair gt given eval gt x lt y Dick Dick 270 KAPITEL 2 KONSTRUKTIONEN SS A eval gt x lt y Dick DicKe gt FEL eval gt gensym gt 9876 eval gt x lt y 9877 gensym gt SE 2 5 Abbildungsoption Funktion mit Umgebung Der klassische LISP Kern konzipiert von John McCarthy z B 124 das sogenannte Pure LISP ist eine applikative Sprache da die Ap plikation Anwendung von Funktionen das wesentliche Konstruktions mittel ist Dieses Pure LISP ist gleichzeitig eine funktionale Sprache da die Abstraktion auf der Komposition von Funktionen evaluierten lambda Konstrukten beruht Diese Schachtelung erm glicht das Kom binieren primitiver Konstrukte zu komplexen anwendungsspezifischen L sungen Pure LISP ist der Stammvater vieler Sprachen f r das funktionale Programmieren lt gt z B 87 46 89 55 Zu nennen sind z B FP 7 HOPE genannt nach Hope Park Square Adresse von Edinbur gh s Department of Computer Science oder ML 75 L
72. 0 Legende Beispiel LISP Wizard S 444 Abbildung 3 11 Slide LISP Wizard 3 5 Prim r Objekt Orientierung Objekt Orientierung verk rpert viel mehr als eine Programmierungstechnik Sie ist eine Denkwelt der gesamten Softwareentwicklung Von der m chtigen LISP Denk Welt wurde bisher ein relevanter Aus schnitt behandelt Nun stellt sich die Frage welche der skizzierten Op tionen sollte man im Zweifel vorrangig in Betracht ziehen wenn es um die konkrete Entwicklung einer Anwendung geht Richtschnur ist das Ziel die Software in einer ausreichenden Qualit t termingerecht mit m glichst geringem Aufwand zu erstellen Dabei wird die Qualit t von Software bestimmt durch ihre 1 Leistungsf higkeit Die Software erf llt die gew nschten Anforderungen 2 Zuverl ssigkeit Die Software arbeitet auch bei ungew hnlichen Bedienungs ma nahmen und bei Ausfall gewisser Komponenten weiter und liefert aussagekr ftige Fehlermeldungen Robustheit 24Zur umfassenden Bedeutung der Objekt Orientierung siehe z B 31 100 3 5 PRIMAR OBJEKT ORIENTIERUNG 447 3 Durchschaubarkeit amp Wartbarkeit Die Software kann auch von anderen Programmierern als dem Autor verstanden verbessert und auf geanderte Verhaltnisse ein gestellt werden 4 Portabilitat amp Anpassbarkeit Die Software kann ohne gro en Aufwand an weitere Anforde rungen angepasst werden 5 Ergonomie Die Software ist leicht zu handhaben
73. 1 Cent thread lambda Upcase Alphabet th2 thread lambda Downcase Alphabet sleep 3 end eval gt Alphabet with Threads gt aAbBcCdDeEfFgGhHiljJkK1LmMnNoOpPgQrRsSt TUuUVVWWxxyY2Z end Synchronisation Da beim User Thread die Steuerung vom Programmierer definiert wer den muss ist beispielsweise der Zugriff auf eine gemeinsame Ressource genau zu planen F r das Verstehen einer solchen Synchronisation ver wenden wir als Beispiel den Namen eines Kontos der durch die zweima lige Applikation des Mutators set entsteht Zun chst sorgen wir ohne Threads f r die sequentielle Abarbeitung wie folgt 2 9 KOMMUNIKATION 399 eval gt define Konto Name lambda let name Ausgaben set name string gt symbol string append symbol gt string name noe set name string gt symbol string append symbol gt string name dubios y display name eval gt Konto Name gt AusgabenIdubios Die beiden set Konstrukte werden in Thunks verpackt und je weils einem thtread Konstrukt zugeordnet Wie im Beispiel Alpha bet with Threads S 358 steuern wir mit sleep Konstrukten indirekt die Priorit ten der Threads eval gt define Konto Name with Threads lambda x y 2 let name Ausgaben thread lambda set name string gt symbol string append begin sleep x symbol gt string name Aas ee thread lambda set name string
74. 1 ist keine leere Worth lse oder kein Pleonasmus weil offensichtlich Programme von Daten gesteuert werden Der Programmierer definiert selbst eine dispatch Funktion die den Zugang zu den datentypabh ngigen Operationen re gelt Die Idee besteht darin f r jeden anwendungsspezifischen Datentyp ein selbstdefiniertes Symbol zu vergeben Jedem dieser Datentyp Symbole ist die jeweilige Operation als ein Attribut zugeordnet Quasi berneh men damit die Datenobjekte selbst die Programmablaufsteuerung Erst zum Zeitpunkt der Auswertung eines Objektes wird die zugeordnete Ope ration ermittelt Exkurs Pattern driven Programming Ist die Auswahl der Operation abh ngig von mehreren Daten im Sinne eines strukturierten Datentyps dann liegt es nahe das Auffinden der Pro zedur als einen Vergleich zwischen einem Muster und einem Pr fling mit dem Ziel Passt zu konzipieren Abschnitt 2 4 3 S 249 Ein allge meing ltiger Interpreter der dieses Passen feststellt wird dann isoliert d h aus dem individuellen Programmteil herausgezogen Da eine Datenbeschreibung z B eine aktuelle Menge von Argumenten prinzipiell mehrere Muster und oder diese auf mehr als einem Wege ent sprechen k nnte ist eine Abarbeitungsfolge vorzugeben Die Kontrollstruk tur der Abarbeitung ist gestaltbar im Sinne eines Beweises d h sie geht 26engl data directed programming oder auch data driven programming 27 Als Pleonasmus wird eine berfl ss
75. 153675 0 102450 0 81960 0 122940 0 Stelle Hamburg 35345 0 33706 0 25612 0 56348 0 1 2 KOMBINIEREN VON KONSTRUKTEN 103 Um den Gesamtbedarf an Sachmitteln f r die Beh rde f r das Jahr 2011 zu berechnen sind alle Betrage in der Matrix Struktur zu sum mieren Dazu ist in den geschachtelten Iterationen ein Akkumulator er forderlich Dieser ist als lokale Variable mit Hilfe des 1et Konstruktes definierbar Da der Endwert des Akkumulators die gesuchte Losung dar stellt sind die R ckgabewerte der beiden map Konstrukte nutzlos Wir ersetzen daher die map Konstrukte durch for each Konstrukte Das for each Konstrukt unterscheidet sich von dem map Konstrukt da durch dass die Iterationsergebnisse nicht den R ckgabewert bilden eval gt define Gesamtbedarf 2011 let Akkumulator 0 for each lambda Organisation for each lambda Betrag set Akkumulator Akkumulator Betrag car cdr Organisation Sachmittel Quartalsbedarf 2011 Akkumulator eval gt Gesamtbedarf 2011 gt 3083674 0 1 2 3 Zeitpunkt einer Wertberechnung Im Rahmen der Selektion S 80 wurde anhand einer Entscheidungs tabelle Tabelle 1 14 S 82 deutlich dass bei Nebeneffekten der Zeit punkt einer Wertberechnung bedeutsam ist Wir wollen explizit den Zeit punkt festlegen wann die einzelnen Bedingungen ihren Wert berechnen Zum Zeitpunkt der Definitionen von B1 B2 B3 und B4 d rfen die Ab fragen d
76. 3 REKURSION ALS PROBLEMLOSUNGSMETHODE 137 Struktur Tiefe AB D E F gt 5 eval gt Lang _ _ lebe LISP 138 KAPITEL 1 KONSTRUKTE Kapitel 2 Konstruktionen m Rahmen des zweiten Kapitels analysieren wir Programmierbeispiele und erweitern die Menge der im ersten Kapitel erl uterten Konstrukte Bausteine Wir skizzieren charakteristische Konstruktionen Bauar ten und vertiefen diese im Zusammenhang mit Programmier Para digmen d h mit Vorstellungen des Konstrukteurs ber die Abarbeitung durch einen m glicherweise auch fiktiven Rechner Im Mittelpunkt ste hen die konstruktiven handwerklichen Aspekte des Programmierens und weniger die sthetischen wie sie etwa im Leitmotto The Art of Pro gramming zum Ausdruck kommen Hinweis Begriff Konstruktion Der Begriff Konstruktion lateinisch Zusammenschichtung bezeichnet in der Technik die Bauart eines Produktes oder Erzeugnisses In der Mathe matik bezeichnet man damit die Herleitung oder Ermittlung eines mathe matischen Objektes mit Hilfe genau beschriebener Operationen Kon struktionsvorschriften aus bestimmten Ausgangsobjekten Beispielsweise 139 140 KAPITEL 2 KONSTRUKTIONEN ist in der Geometrie eine gesuchte Figur aus den vorgegebenen Elemen ten wie Geraden Winkeln und Kreisen herzuleiten Die konstruktive for male Logik ist eine wissenschaftliche Disziplin Theorie des Argum
77. 5 Zusammenfassung Rekursion 131 2 Konstruktionen 139 2 1 Verstehen einer Konstruktion 2 2222 22er 141 2 1 1 Analysesspekte ix 34 Go GRO KAKA O WEE RE HEA 145 2 1 2 Verbund von Konstruktor Selektor Pr dikat und Mutator 146 2 1 3 LISP Klassiker Symbolisches Differenzieren 151 2 1 4 Zusammenfassung Abstraktionsebene 158 2 2 Abbildungsoption Liste 00000 22008 160 221 Zirkle liste sess sdra eh ee ee Fe ee aba 166 2 22 SSSOZlat onslisie a cid ceed ee ek ehee See eai 183 2 2 3 Eigenschaftsliste 05 26s ee wee ee eee 191 2 2 4 Zusammenfassung Liste A Liste und P Liste 211 2 3 Abbildungsoption Vektor 2 2 2 saoao a 215 2 3 1 Vektor Konstr kte 2 2 2 20 eos Ge HOSS 216 2 3 2 Abbildung der cons Zelle als Vektor 219 2 3 3 Hohenbalancierter Baum 0 4 222 2 3 4 Zusammenfassung Vektor 2 2 2222er 236 INHALTSVERZEICHNIS 2 4 Abbildungsoption Zeichenkette und Symbol 2 4 1 Mustervergleich 40 u sc awh eee PEW MED ed 2 4 2 string Konstrukte vt ak a 4 KR He Hae Oe he 2 4 3 Symbol und PRINT Name 4 o 4 24 4 4 zu we 2000 2 4 4 Generieren eines Symbols 2 4 5 Zusammenfassung Explode Implode und gensym 2 5 Abbildungsoption Funktion mit Umgebung 2 5 1 Funktionen h herer Ordnung 2222er 200 2 5 2 Kontrollstruktur Continuation 2 2 22222200 2 5 3 Syntaxverbesse
78. 7 gt 10 Die Bindungsstrategie bestimmt zu welchem Zeitpunkt die Variablen ihren Wert erhalten Die jeweilige Implementation bestimmt auf welche Art und Weise der Wert einer Variablen gespeichert und nachgeschaut wird Bei der ersten Er rterung der Umgebung S 42 haben wir die dynamische und die lexikalische Bindungsstrategie angedeutet Die beiden wesentlichen Implementationskonzepte werden als deep access und shallow access gekennzeichnet Die Implementation deep access hat im Vergleich zu shallow access den Vorteil ohne gro en Aufwand den Wechsel der aktuellen Umgebung vollziehen zu k nnen Shallow access hat demgegen ber den Vorteil auf den Wert der Variablen schnell zugrei fen zu k nnen Im folgenden werden diese Implementationskonzepte nicht weiter diskutiert N heres dazu z B 2 Wir unterstellen die lexikalische Bindungsstrategie und behandeln damit die Funktion und ihre Umgebung als Option lokale Werte abbil den zu k nnen Zun chst vertiefen wir Funktionen h herer Ordnung Abschnitt 2 5 1 S 271 Funktionen h herer Ordnung k nnen Funktionen als Werte von lam bda Variablen haben Dabei zeigen wir dass es sinnvoll sein kann sogar die Funktion selbst an ihre 1ambda Variable zu binden Mit dem allge meinen Kontrollstrukturkonstrukt call with current continua tion l sst sich an die lambda Variable die Fortsetzung der Verarbei tung d h die Restkonstruktion binden Das Continuation Konzept
79. 7 des Fachbereichs 2 Systemanalyse der Hochschule Bremerhaven ISSN 0176 8158 Hinrich Bonin Objektorientierte Programmierung mit LISB in Handbuch der Mo dernen Datenverarbeitung HMD 26 Jahrgang Heft 145 Januar 1989 S 45 56 Gerhard Brewka Franco di Primo Eckehard Gro BABYLON Referenzhand buch V1 1 1 Institut f r Angewandte Informationstechnik Gesellschaft f r Ma thematik und Datenverarbeitung mbH Bonn 1987 Hank Bromley Richard Lamson LISP LORE A Guide to Programming the LISP Machine Second Edition Boston Dordrecht Lancaster Kluwer Academic Publis hers 1987 Rodney A Brooks Richard P Gabriel Guy L Steele Jr S 1 Common Lisp Im plementation ACM LISP Conference New York 1982 pp 108 113 LITERATURVERZEICHNIS 489 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 Rodney A Brooks Richard P Gabriel A Critique of Common Lisp Conference record of ACM symposium on LISP and functional Programming Proceedings Salt Lake City Utha 1984 pp 1 8 Rodney A Brooks LISP Programmieren in Common Lisp M nchen Wien R Oldenbourg Verlag 1987 Original 1985 Programming in Common Lisp John Wiley Fred Brooks The Mythical Man Month Addison Wesley 1975 ISBN 0201006502 Manfred Broy Johannes Siedersleben Objektoientierte Programmierung und Softwareentwicklung Eine kritisch
80. B Flavor Sy stem deutsch Aroma Wohlgeschmack als Bezeichnung f r eine ob jekt orientierte Entwicklungsumgebung Um das Verstehen des laufen den Textes zu sichern sind Textpassagen im Sinne von gedanklichen Einsch ben abgegrenzt Dabei treten folgende Einsch be auf Hinweis lt text gt lt text gt verweist auf eine Besonderheit oder Empfehlung Exkurs lt text gt Zum besseren Verstehen der Hintergr nde erl utert lt text gt einen zusatz lichen Aspekt Notation f r die Schnittstelle zum LISP System eval gt lt sexpr gt gt lt sexpr gt Kommentar eval gt ne Diese Zeichenfolge gibt an dass die danachfolgenden Zei chen dem Zyklus Lesen Auswerten Ergebnisausgabe READ EVAL PRINT Zyklus bergeben werden eval gt steht anstelle der Aufforderung Prompt eines laufenden LISP Systems das eine Eingabe erwartet LISP Systeme verwenden unterschiedliche Aufforderungen und zus tzlich sind diese oft individuell modifizierbar Wir benutzen eval gt 29 137 f r Scheme Zur Betonung eines bestimmten LISP Dialektes ist ein Kennbuchstabe als Pr fix vorangestellt symbolic expression ein symbolischer Ausdruck LISP Konstrukt Dokumentiert das Ergebnis d h die nach dem Pfeil darge stellten Zeichen werden vom PRINT Teil ausgegeben Das Semikolon kennzeichnet einen Kommentar Alle Zeichen nach dem Semikolon in einer Zeile sind im READ EVAL PRINT Zyklus Kommentare d h werden
81. B als eine globale Funktion Sum definieren so dass sie der obigen F Definition entspricht Unsere L sung besteht dann aus der Sum Definition und dem Rest des 1et Konstruktes eval gt define Sum lambda Fkt lambda Lst cond null fist 0 number car Lst car Lst 2 5 ABBILDUNGSOPTION FUNKTION MIT UMGEBUNG 283 Fkt cdr Lst t Fkt cdr Lst eval gt let Summe lambda Funktion lambda Liste Sum Funktion Funktion Liste Summe Summe Zahlungen gt 80 0 Die Analyse dieser Losung ergibt Fur eine allgemeine Anwendung ist es ung nstig dass in der lokalen Funktion Summe die Funktion Sum explizit aufgerufen wird Um diesen Mangel zu beheben bauen wir die Definition von Summe in eine Funktion YO ein deren lambda Variable Fun dann an Sum gebunden wird so dass Fun appliziert werden kann Der explizite Sum Aufruf wird durch einen Fun Aufruf ersetzt Bei der Yo Definition sorgen wir daf r dass ihr R ckgabewert Summe Sum me ist Die L sung hat dann folgende Struktur let S YO Sum S Zahlungen und Yo folgende Definition eval gt define YO lambda Fun let Summe lambda Funktion lambda Liste Fun Funktion Funktion Liste Summe Summe Die so abstrahierte Definition YO stellt den Fixpunktoperator Y dar Fur seine allgemeine Anwendung benennen wir die lLambda Variablen von YO um und zwar Fun in F Summe in G FunktioninH und Liste in
82. Baumblatt x System Antwort x t System Frage x Navigation Verzweigung x Navigation Baum Tabelle 1 23 Programm Beratungssystem konstruiert mit einem Bin r baum 128 KAPITEL 1 KONSTRUKTE Das Programm in Tabelle 1 23 S 127 wenden wir im Folgenden fir eine skizzenhafte Beratung zum Erwerb eines Fahrrades an eval gt define Fahrrad Analyse Hat es einen Diamantrahmen Ist der Rahmen hoeher als 56 cm Ungeeignet fuer ein Kind Notfalls fuer ein Kind verwendbar Bedingt geeignet nur fuer kleine Personen eval gt Beratungssystem Fahrrad Analyse gt Hat es einen Diamantrahmen Nein Systemantwort Bedingt geeignet nur fuer kleine Personen 1 3 4 Geschachtelte Rekursion Beispiel Umdrehen der Reihenfolge der Elemente in einer Liste Die Funktion reverse hat als Wert eine Liste die die Elemente ihres Argumentes in umgekehrter Reihenfolge aufweist eval gt reverse A B C D gt D BC A Wir definieren diese Funktion selbst und zwar rekursiv Um die ein gebaute Funktion nicht zu uberschreiben nennen wir unsere Funktion Umdrehen Im Sinne der rekursiven Problemsicht halten wir zunachst fest dass das Konstrukt Umdrehen bei einer Liste ohne Elemente den Wert hat Dann unterstellen wir dass f r eine Liste eine Teill sung vorliegt n mlich ihre umgedrehte Restliste Mit dieser Teill sung ist dann die gesamte Probleml sung bekannt Sie ist gleich d
83. Code for Information Intergage integer gt char 64 gt eval gt display integer gt char 64 gt Wir zeigen die Wirkungsweise anhand von ein paar Beispielen eval gt define Bar 0 1 2 3 4 eval gt define Baz 5 6 eval gt cons append Bar Baz gt 0123 4 5 6 eval gt Bar Baz Kein Backquotezeichen gt Bar Baz 2 5 ABBILDUNGSOPTION FUNKTION MIT UMGEBUNG 295 eval gt Bar Baz gt 0123 4 5 6 eval gt Bar Baz gt 0123 4 5 6 eval gt Bar Baz gt ERROR Symbol nicht definiert in aktueller Umgebung Achtung Leerzeichen zwischen Komma und Klammeraffen macht diesen zu einem selbstandigen Symbol Mit dem quasiquote Konstrukt drehen wir die bliche LISP Nota tion um Jetzt wird kein Ausdruck ausgewertet der nicht besonders ge kennzeichnet ist durch das unquote Konstrukt Normalerweise wird jeder Ausdruck ausgewertet es sei denn er ist besonders durch das quote Konstrukt gekennzeichnet Ein Makro der in der EVAL Phase expandiert kann am einfachsten mit dem define syntax rule Konstrukt erzeugt werden Dabei sei angemerkt dass solche Makros eigentlich un Schemely sind weil sie Nebeneffekte bez glich von Variablen erm glichen Der Zweck von sol chen Makros ist die M glichkeit eine von anderen Sprachen her gewoh ne Syntax zu schaffen deshalb auch der Name dieses Konstruktes D
84. Daten gesteuerte Programmierung Wurzel 448 Datenlexikon 183 186 De Remer E L 65 490 Deadlock 364 Debugger 116 deep access 271 define struct 309 define syntax rule 295 298 define override 339 define public 329 Definitionsproblem 406 Denert Ernst 490 Dening Bratfisch Karin 5 Denkmodell 141 Denkrahmen funktions gepragt 307 imperativ gepragt 308 Deutsch L P 458 490 di Primo Franco 328 488 490 Diederich Joachim 496 Dijkstra Edsger W 360 389 490 DIN 66261 98 Diskriminator 61 431 DISPATCH Funktion 448 display 168 473 display pure port 353 DisplayLn 288 do 473 Documentation String 391 dotted pair 58 downward funarg 47 draw 477 draw rectangle 475 DrScheme 15 502 dump memory stats 367 Dybvig R Kent 496 dynamische Bindung 47 Eddy E 418 496 Effizienz 457 Eggers Bleike 490 Eisenbach Susan 270 490 Eisenberg Michael 490 Emacs LISP 463 Embley David W 418 490 Encapsulation 333 Enthalt Relation 411 Entscheidungstabelle 80 Environment 42 eof object 353 eq 59 equal 59 equal hash 189 Esser Rudiger 490 ET 80 EuLISP 459 eval 31 eval gt 6 20 except in 321 exists 353 Expansion Makro 296 Exper LISP 463 Facet 190 Fahlman Scott E 390 392 459 497 Farrell Robert 487 Feigenbaum Edward A 487 Feldmar Elisabeth 490 Felleisen Matthias 469 490 Feys R 489 field 329 Findler Robert B 469 490 First class Ob
85. Discriminator gt Abbildung 3 7 S 432 3 3 3 Zusammenfassung UML Mit vielen Rechtecken Boxen die mit Linien und Pfeilen verbunden sind kann ein Klasse Instanz Modell dargestellt werden Holzschnittar tig formuliert die UML Boxologie leistet einen n tzlichen Beitrag f r die Durchschaubarkeit Transparenz von objekt orientierten Systemen Die simple UML Grafik l sst sich leicht mit LISP Konstrukten pro grammieren Zum Training und zur Demonstration der Grafikoptionen 20Angemerkt sei dass diese Boxologie nichts mit den Boxern im Sinne von Faustk mpfern oder im Sinne des chinesischen Geheimbundes um 1900 zu tun hat Auch die Box als eine einfache Kamera oder als Pferdeunterstand sind hier keine hilfreiche As soziation 434 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Characteristics weight double material String Aluminium Component Spoke produceQuantity Wheel maxNumberSpoke int 48 rim Rims hub Hubs spoke Spokes Legende Chart Wheel Konstrukt S 434 Abbildung 3 8 UML Klasse Whee1 wurde exemplarisch das UML Klassendiagramm programmiert Hier ist die folgende Aussage als ein UML Klassendiagramm lt gt Abbildung 3 8 S 434 entsprechend programmiert Ein Laufrad besteht aus einer Felge einer Nabe und bis zu 48 Speichen Relevant sind Gewicht und Material fiir alle Teile Chart Wheel3 Konstrukt Beisplel UML Diagram
86. Ein Pure LISP System mit dem Umfang von Scheme e Level 1 Ein mittleres LISP System e Level 2 Ein gro es LISP System mit dem Umfang von Common LISP A 1 Rechner fur LISP Systeme Wir skizzieren hier Rechner ftir LISP Systeme ohne eine Bewertung in Bezug auf einzelne Aufgabenklassen Abschnitt 3 2 S 403 Auch sind keine Leistungskennwerte angegeben Dazu sei auf den LISP spezi fischen Benchmark Vorschlag von Richard P Gabriel verwiesen 67 LISP Systeme sind heute auf allen gebr uchlichen Rechnern verf g bar Neben LISP Maschinen Symbolic Processors kann erfolgreich mit Mainframes Workstations Personalcomputern und Supercomputern in LISP Software konstruiert werden Diese Rechnereinteilung in vier grobe Leistungsklassen benutzen wir um die Entwicklung und spezielle Eigen schaften zu er rtern Eine Kurzbeschreibung verbreiteter LISP Systeme enth lt der anschlie ende Abschnitt A 2 S 462 in dem auch auf die Rechnerklassen verwiesen wird LISP Maschinen Geschichte Mitte der 70iger Jahre entstand am MIT ein Prozessor speziell ausge richtet auf die Anforderungen der Symbolverarbeitung Dieser Rechner wurde unter dem Namen LISP Maschine bekannt Das MIT vergab an die A 1 RECHNER FUR LISP SYSTEME 461 Firmen Symbolics Inc und an LISP Machine Inc die Lizenz zum Bau und Vertrieb dieses Prozessors In Konkurrenz zum MIT Projekt entwickelte man bei Xerox Palo Alto Research Center kurz PARC ebenfalls eine ko
87. Empfehlungen oder Selektor derart zu bezeichnen dass man den Datentyp ersehen kann den die Schnittstelle des Konstruktes erwartet Ein Beispiel ftir einen solchen Namen ist ARGLIST FIRST ARG 173 S 176 Oder es wird pr zisiert in welchen Fallen die Selektoraufgabe vor der Pradikataufgabe im Namen Vorrang hat In Scheme haben daher die Konstrukte memg memv member assq assv und assoc kein Fra gezeichen am Namensende weil sie nutzliche Werte und nicht nur den Standardwahrheitswert t zur ckgeben 151 Sind viele Aspekte mit dem Namen zu vermitteln dann f hrt dies zwangsl ufig zu sehr langen Namen Lange Namen vergr ern den Um fang der Dokumente Sie f hren dar ber hinaus schnell zu Problemen bei einer begrenzten Zeilenl nge Vor und Nachteile bezogen auf die Namensl nge zeigt Tabelle 3 1 S 380 3 1 TRANSPARENZ DER DOKUMENTATION 381 Ein Name insbesondere ein langer Name ist zu strukturieren Wir unterteilen einen Namen in einen Vorspann Pr fix den Hauptteil Stamm und einen Nachspann Suffix Die Tabelle 3 2 S 380 zeigt die verwendete Regelung f r Pr fix und Suffix die zusammen als Affix be zeichnet werden Die Optionen zur Wahl und Strukturierung eines zweckm igen Na mens er rtern wir anhand eines Beispiels Es sei der Kurzname der Firma aus den Kundendaten zu selektieren Dazu betrachten wir sowohl die Namen bei der Funktionsdefinition also die Benennung der lambda Abstraktion als a
88. Examples International joint conference on artificial intelligence Procee dings Tbilisi Georgia 4 1975 pp 260 267 Laurent Sikl ssy Let s Talk Lisp Englewood Cliffs New Jersey Prentice Hall 1976 Siemens AG M nchen INTERLISP Interaktives Programmiersystem BS2000 Benutzerhandbuch Bestellnummer U90015 J Z17 1 Ausgabe September 1981 Version 4 Stephen Slade The T Programming Language A Dialect of LISP Englewood Cliffs New Jersey Prentice Hall Inc 1987 Peter Smith An Introduction to LISP A Chartwell Bratt Student Text Lund Stu dentliteratur 1988 Michael Sperber R Kent Dybvig Matthew Flatt Anton van Straten Editors Revised Report on the Algorithmic Language Scheme 26 September 2007 http www r6 rs org online 3 Dec 2009 LITERATURVERZEICHNIS 497 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 George Springer Daniel P Friedman Scheme and The Art Of Program ming Cambridge Massachusetts London England MIT Press 1989 Guy Lewis Steele Jr LAMBDA The Ultimate Declarative Massachusetts Institute of Technology Artificial Intelligence Laboratory AI Memo 379 November 1976 Barbara K Steele Strategies for Data Abstraction in LISP LISP Conference Stan ford Redwood Est 1980 pp 173 178 Guy L Steele Jr Scott E Fahlman Richard P Gabriel David A Moon Dan
89. G 2 G H Ii 1 _ ot D L G L rm rn m I A E H Y D GA HZ Y a m GA HZX Z A E HA X Z o HA Legende Notation Abbildung 2 19 S 226 Ausbalancieren eines Baums durch Rotation Beispiel zum Verstehen des Konstruktes AVL Baum Montage gt Programm S 229 Abbildung 2 18 Baum Fall 4 doppelte Rotation 226 KAPITEL 2 KONSTRUKTIONEN A Z Auspr gungen des Schlussels Key f r den binaren Baum Sie reprasentieren einen Knoten als folgenden Vektor D m A E 2 D Text lt linker Teilbaum gt lt rechter Teilbaum gt mit lt linker Teilbaum gt 1 A lt text gt LEERER BAUM LEERER BAUM lt rechter Teilbaum gt 1 E lt text gt LEERER BAUM LEERER BAUM lt text gt Zum KEY zugeordnete Daten eval gt LEERER BAUM gt 0 Legende Abbildungen 2 19 S 226 bis 2 18 S 225 Abbildung 2 19 Baum Notationserl uterung Die lambda Variable Operation wird an den Wert des ersten Argu ments gebunden Aufgrund der Angabe des Punkt Paares werden alle Werte von weiteren Argumenten zun chst zu einer Liste zusammen gefasst dann wird die lambda Variable Parameter an diese Liste ge bunden Gibt es keine weiteren Argumente hat Parameter den Ersatz wert null eval gt Aktenverwaltung Eingabe A 12 Fall Krause Wahrend der Abarbeitung dieser Applikation sind folgende Bindungen gegeben Operatio
90. Go To Considered Harmful in Communications of the ACM Volume 11 Number 3 March 1968 pp 147 148 Deutsches Institut f r Normung e V Entscheidungstabelle Beschreibungsmit tel Berlin K ln Beuth Verlag Deutsches Institut f r Normung e V Sinnbilder nach Nassi Shneiderman und ihre Anwendung in Programmablaufpl nen Berlin K ln Beuth Verlag Franco di Primo Thomas Christaller A Poor Man s Flavor System Institut Dalle Molle ISSCO Universite de Geneve Working Paper No 47 May 1983 Domain Common LISP User s Guide A Concise Reference Manual Order No 008791 Product developed by Lucid Inc of Menlo Park California 1986 Susan Eisenbach editor Functional Programming Languages Tools and Archi tectures Chichester Ellis Horwood Limited 1987 Michael Eisenberg Programming in Scheme Cambridge Massachusetts London England MIT Press paperback 1990 1988 by The Scientific Press Bleike Eggers Zimmermann LISP Manuskript der Vorlesung WS 1981 82 und WS 1983 84 Technische Universit t Berlin Fachbereich Informatik David W Embley Barry D Kurtz Scott N Woodfield Object Oriented Systems Analysis A Model Driven Approach Englewood Cliffs New Jersey Yourdon Press 1992 R diger Esser Elisabeth Feldmar LISP Fallbeispiele mit Anwendungen in der k nstlichen Intelligenz Paul Schmitz Hrsg Reihe K nstliche Intelligenz Braun schweig Wiesbaden Vieweg amp Sohn 1989
91. Jr am MIT f r Experimentierzwecke mit Programmierparadigmen ent worfen Scheme verzichtet auf Kompatibilit t mit klassischen LISP Konzepten zugunsten eines mathematisch stringenten Konzeptes R6RS Revised Report on the Algorithmic Language Scheme ist ein moderner LISP Dialekt der z B in der hier genutzten Form von PLT Scheme S 15 und S 467 eine leistungsf hige Entwick lungsumgebung bereitstellt 460 ANHANG A LISP SYSTEME Erst in den 7Oiger Jahren reiften die heute aktuellen Konzepte so dass die Standardbem hungen laufend berrollt wurden Mit Common LISP konnten diese Verbesserungen z B die lexikalische Bindungsstra tegie oder generische Funktionen im Standard integriert werden Al lerdings blieb Common LISP in wichtigen Punkten hinter Dialekten wie Scheme zur ck insbesondere weil man der Kompatibilit t mit damals existierenden LISP Dialekten besondere Priorit t einr umte um die rie sige Menge vorhandener Anwendungssoftware leichter auf den Stan dard umstellen zu k nnen Bei den Bem hungen ein neues europ isches LISP zu standardi siern hatte die Stringenz der Spezifikation vor der Kompatibilit t mit vorhandenen LISP Programmen Priorit t Aus den Erfahrungen mit dem Common LISP Standardisierungsprozess hat man gelernt und spezifiziert den Standard nicht als monolithischen Block eines umfassenden LISP Systems Die Spezifikation sieht verschiedene Leistungsschichten vor z B 177 e Level 0
92. Konstrukt Basis Tabelle 1 8 S 64 zweckm iger ist bedingt eine Prognose ber die Fortentwick lung des Softwareproduktes Das skizzierte Beispiel Kontenverwaltung verdeutlicht dass unsere Konstruktions Entscheidungen im Kontext des gesamten Software Lebenszyklus zu treffen sind Die Erf llung einer funktionalen Anforderung z B das korrekte Abbilden einer Buchung ist notwendig aber nicht hinreichend Hinzukommen muss die Abdeckung von erwartbaren Anforderungen aus den sp teren Phasen des Lebenszy klus In unserem Kontext Konstruktion ist stets zu unterscheiden ob es um die Realisierung relativ kleiner Konstrukte Menge einzelner An weisungen Befehle oder um gro e Konstrukte ganze Programmein heiten geht Im ersten Fall ist die Reihenfolge der Aktivierung einzelner Anweisungen Befehle zu diskutieren Im zweiten Fall geht es um die Ko ordination von ganzen Programmteilen Moduln also um abgeschlos sene Folgen von Anweisungen Befehlen Zun chst widmen wir uns der Realisierung kleiner Konstrukte die h ufig als Programmierung im Klei nen engl programming in the small bezeichnet wird 48 Wir fangen also klein an und skizzieren mit wachsendem LISP Fundus Ver kn pfungstechniken f r das Programmieren im Gro en engl pro gramming in the large 1 2 2 Kontrollstrukturen Legen wir fest wann unter welchen Bedingungen und wie oft einzel ne Konstrukte auszuwerten sind so definieren wir
93. Konstrukt mo difiziert den Wert von Foo Wir beurteilen hier nicht ob es sich um ein trickreiches Konstrukt handelt das besser durch eine durchschaubare L sung zu ersetzen ware dazu 106 Uns interessiert das Beste hen der Kommentierungs Pflicht eval gt define Foo Make Array 4 5 eval gt let n 4 m 5 do i 1 i 1 gt 1 n do j 1 jJ 1 gt J m Array set Foo i quotient i quotient j i eval gt Foo gt 1 0000 0 1000 0 01 0 0 0 001 0 Der neue Wert von Foo ist f r den angenommenen Leser nicht sofort nachvollziehbar Dieser muss erkennen dass das Argument quoti ent i j quotient j i nur die beiden Werte O und 1 anneh men kann Ist eq i j erf llt dann ist es der Wert 1 andernfalls ist es der Wert 0 Das quotient Konstrukt hat als R ckgabewert die Inte gerzahl der Divisionsrechnung Es ist daher adressatengerecht auf diese Integerdivision hier mit einem Kommentar hinzuweisen eval gt let n 4 m 5 do i 1 i 1 gt i n do 1 J 1 gt J m Array set Foo i j Integer Division Wert entweder 0 oder 1 quotient i j quotient j i 3 1 3 Vorwarts und Ruckwartsverweise In den ersten Phasen des Konstruierens mag ein lokal sequentielles Le sen und Vergleichen mit anderen Passagen im selben Dokument oder 394 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Eigenschaften der Dokumentation
94. LISP Dialektes wie Scheme Wir k nnen jedoch mit ihnen wesentliche Charakteristika diskutieren So kann z B kein Konto mit dem Namen 1234 entsprechend unserem Konto Meyer AG S 26 gebildet werden eval gt define 1234 Kunde Neuanlegen Daten zu Konto 1234 gt ERROR Fehlerhaftes Symbol f r define 68 KAPITEL 1 KONSTRUKTE BFN Variable lt sexpr gt quote lt sexpr gt Kreieren einer Konstanten cons lt sexpr gt lt liste gt Einf gen in eine Liste car liste Selektion des ersten Elementes die else Selektion der Restliste dere sap T Bilden einer Liste define lt symbol gt lt sexpr gt Binden eines Symbols set lt symbol gt lt sexpr gt Modifizieren einer Bindung cond lt sexpr gt Fallunterscheidung oap y lambda lt symbol gt Definition einer lt sexpr gt sexpr Funktion apply lt sexpr gt lt liste gt Applikation einer Funktion eval lt sexpr gt Auswertung in einer Umgebung lt funktion gt Komposition E Sfunkmon lt vague Legende Backus Naur Form Exkurs Abschnitt 1 2 2 S 66 Zeichen hinter einem Semikolon in einer Zeile sind Kommentar Tabelle 1 9 S 67 Tabelle 1 10 Er rterte Konstruktions Mittel Teil 2 1 2 KOMBINIEREN VON KONSTRUKTEN 69 Die Zahlatome sind von Symbolen auch Literalatome genannt zu unterscheiden Nur mit Symbolen ist das Kreieren einer Wert Assoziation
95. Li stenstruktur ist als Knoteninformationen eines Baumes gespeichert Die Listenelemente selbst sind dann als Menge von Tupeln Knotennummer Wert speicherbar Das Suchen im Strukturbaum ist effizient gestaltbar so dass der Zugriff auf Listenelemente im Durchschnitt wesentlich schneller als bei der klassischen Zweizeiger Zelle ist Welche Listenabbildung ist vorzuziehen Vektorcodierung hat Spei cherplatzvorteile Strukturcodierung hat Zugriffsvorteile Offensichtlich ist die Wahl davon abh ngig welche Listen und Zugriffe f r das jeweili ge LISP Programm typisch sind LISP selbst und nicht der Programmierer ist f r die Speicherplatz verwaltung verantwortlich insbesondere f r die Bereitstellung engl allocation und Freigabe engl deallocation von cons Zellen im so genannten Heap Speicher deutsch Haufen Die Freigabe im Sinne ei ner Speicherbereinigung engl garbage collection ist ein zweistufiges 459 Verfahren mit garbage Erkennung und garbage R ckgabe Das Ziel ist es dass diese garbage Bearbeitung keinesfalls kritische Ausf hrungen verz gert Der Zeitpunkt der garbage Bearbeitung und die Heap Teilbe reiche die erfolgversprechend untersucht werden sind zu optimieren effiziente Absterbeordnung Im Laufe der langen LISP Entwicklung erzielte man wesentliche Ver besserungen bei den skizzierten Optimierungsaspekten Funktionsauf ruf Umgebungsmanagement Listenrepr sentation und Speicherplatz management z
96. Liste und null Pr fung auf leere Liste ist das Umdrehen abgebildet Mit Hilfe der Re kursion lassen sich viele eingebaute Konstrukte auf wenige Basiskon strukte d h auf das sogenannte Pure LISP zur ckf hren 1 3 5 Zusammenfassung Rekursion Nimmt eine Definition auf sich selbst Bezug so bezeichnet man diesen Selbstbezug als Rekursion Die L sung eines Problems durch Rekursion ist angebracht wenn das Problem als eine Familie verwandter Proble me betrachtbar ist von denen eines oder mehrere so einfach ist sind dass sich die L sung en direkt angeben l sst lassen Neben diesen trivialen L sungen ist eine Rekursions Route zu definieren so dass die L sung f r das gesamte Problem nach endlich vielen Schritten auf die trivialen L sungen zur ckgef hrt wird Dabei geht es um die Kernfrage Wie kommt man von einem typischen Fall genau einen Schritt n her zu einem trivialen Fall und wie konstruiert man f r den typischen Fall die L sung aus der unterstellten L sung f r den n chst einfacheren Fall Besteht das Problem in der Abarbeitung einer Liste z B im Pr fen ob jedes Element ein bestimmtes Pr dikat erf llt dann ist die L sung als eine rekursive Anwendung der Funktion auf die Restliste definierbar Ein Beispiel ist das member Konstrukt das feststellt ob ein vorgegebe nes Element in einer Liste enthalten ist charakteristische Beispiele S 132 Ist eine Baumstruktur gegeben d h eine List
97. PCs MS DOS Rechner Hersteller Texas Instruments Dallas USA Merkmale Ein gestrafftes LISP mit lexikalischer Bindungsstrategie Unterst tzt wird die objekt orientierte Programmierung durch SCOOPS Die Portierung von Common LISP Programmen ist nicht unproblematisch e Power LISP http www powerlisp com Zugriff 22 Jan 2010 Rechnerklasse PC Hersteller MicroProducts Inc 370W Camino Gardens Boulevard Boca Ra ton Florida 33432 USA Merkmale Vollst ndige Implemetation von Interlisp 182 Enth lt CLISP conversational LISP das laut Hersteller eine LISP Syntax erm glicht die mehr an konventionelle Programmiersprachen angepasst ist e SoftWave LISP http www gnu org software gcl Zugriff 22 Jan 2010 Rechnerklasse PC Hersteller SoftWave Seattle WA 98103 1607 USA Merkmale Einfacher LISP Interpreter der sich am LISP 1 5 orientiert Nur fur Schulungszwecke geeignet e T http www paulgraham com thist html Zugriff 22 Jan 2010 Rechnerklasse Workstation Hersteller T Project Yale Department of Computer Science Box 2158 New Haven CT 06520 USA Merkmale T ist eine Scheme Implementation wobei Scheme eine Untermen ge von T bildet T hat objekt gepr gte Konstrukte und Makros eingebaut verf gt ber einen optimierten Compiler und unterst tzt insbesondere die Fehlersuche 168 e TLC LISP 2 Rechn
98. Prs S3EXPra gt x2 lt SEXDTyi gt aep lt value gt Eine Liste lt p gt lt sexpri gt lt sexpr j gt genannt Regel oder Klau sel engl clause bildet einen Fall ab Dabei ist lt p gt die Bedingung das Pr dikat f r den einzelnen Fall und die optionalen lt sexpr gt bis lt SEeXPrin gt sind die symbolischen Ausdr cke die der Reihe nach ausge wertet werden wenn die Bedingung lt p gt erf llt ist lt p gt ist erf llt 54 KAPITEL 1 KONSTRUKTE A Namenlos DrScheme Agi x Datei Bearbeiten Anzeigen Sprache Scheme Einf gen Hilfe Namenlos define v Macro Stepper 9 Debugger 7 Syntaxpr fung a Start SE Stop lang scheme 4 Willkommen bei DrScheme Version 4 2 2 3m Sprache Module memory limit 256 megabytes gt define foo cond t 7 gt foo 7 gt define foo cond f 7 gt foo gt if foo Ja Nein Ja gt ima Module w 12 2 g Legende Dr Scheme gt http www plt scheme org Zugriff 24 Oct 2009 Abbildung 1 14 Beispiel cond Konstrukt wenn der Wert von lt p gt ungleich false ist Der Wert des cond Konstruktes also lt value gt wird dann nach Eva luierung von lt sexpr gt bis lt sexpr gt durch den zuletzt ermittelten Wert bestimmt Falls j gt 0 also ein lt sexpr gt evaluiert wurde ist lt value gt der Wert von lt sexpr j gt ist j dann ist lt value gt gleich dem Wert von lt p gt
99. Reihenfolge der Nennungen bei der Eigenschaft Nachfolger lt gt Programm in Tabelle 2 5 S 199 dann erhalten wir f r unser Beispiel mit Start bei H und Ziel bei F einen k rzeren Weg statt 35 nur 19 Entfernungseinheiten eval gt putprop H Nachfolger G 17 5 C 14 2 2 ABBILDUNGSOPTION LISTE 205 eval gt Depth first Search H F gt H G F Ob die Tiefensuche f r eine vorgegebene Start Ziel Angabe einen kurzen Weg ermittelt hangt von der Reihenfolge der Knoten in der Liste eroeffnete Knoten ab die sich aufgrund der Reihenfolge der Nachfolgeknoten bestimmt Die Tiefensuche ermittelt stets einen Weg vom Startknoten zum Zielknoten falls ein solcher existiert aber nur zuf llig ist dieser Weg der k rzeste Weg Wir k nnen es nicht der zuf llig passenden Reihenfolge in der Liste eroeffnete Knoten berlassen welchen Knoten wir expandieren wenn das Suchverfahren den k rzesten Weg ermitteln soll nat rlich ohne zun chst alle Knoten zu expandieren Wir ben tigen f r die Auswahl des zu expandierenden Knotens eine zus tzliche Information Diese Angabe muss es gestatten eine Priorit t f r das Expandieren eines Knotens zu ermitteln so dass das bisherige blinde Suchen ersetzt werden kann durch ein priorit ts gesteuertes Suchen z B nach dem A Verfahren Programm S 207 Ben tigt wird eine sogenannte Evaluationsfunktion engl evaluation function f r das Expandieren der Knoten Ach
100. Restbaum die Funktion Navigation erneut an Diese Vorgehensweise entspricht der schon er rterten Technik der Funk tionsanwendung auf die Restliste Abschnitt 1 3 1 S 119 Der Un terschied besteht in der Ermittlung des Restes d h des einfacheren Problems im Sinne der Rekursionsroute Der skizzierte L sungsansatz f hrt zu einer Anzahl von Funktionen die im Zusammenhang mit dem Beratungssystem Konstrukt zu defi nieren sind Au erhalb dieses Konstruktes sind diese Funktionen nicht erforderlich Mit Hilfe einer 1et Formulierung lt gt Abschnitt 1 2 2 S 72 k nnen die Funktionen wie Selektor Ja Baum Selektor Nein Baum Baumblatt Verzweigung Navigation etc als lokale Va riablen definiert werden Wir vermeiden damit dass diese Konstrukte auf der LISP System Ebene top level bekannt sind und z B versehent lich durch namensgleiche Symbole berschrieben werden Mit der let Notation sind ihre Wert Assoziationen nicht in der Startumgebung ein getragen sondern in der Umgebung die durch die let Konstruktion aufgebaut wird Da das Konstrukt Navigation rekursiv ist wird das letrec Konstrukt ben tigt Das Programm in Tabelle 1 23 S 127 zeigt die L sung mit dem let rec Konstrukt Sie weist dar ber hinaus einige kleine Verbesserungen auf z B steht statt der Schachtelung von car cdr cdr Baum der Selektor list ref Baum 2 Hinweis list ref Konstrukt In Scheme ermittelt das 1ist ref Konstrukt das n te Element ei
101. Scheme Dr Scheme eingebauten and und or Konstrukte entsprechen cand und cor Konstrukten die nicht auf zwei Argumente beschr nkt sind sie k nnen beliebig viele Argumente haben eval gt and t print Klar gt Klar eval gt and f print Klar gt r eval gt and 12 3456 gt 6 wahr da alle Werte ungleich eval gt and t list print Klar gt Klar eval gt and f list 1 2 3 gt f obwohl das 3 Argument nicht auswertbar ist da 1 keinen Operator abbilden kann eval gt or or or 1 f and 2 f 3 gt 1 Die Negation eines Wahrheitswertes das not Konstrukt l sst sich ebenfalls auf das cond Konstrukt zur ckf hren 86 KAPITEL 1 KONSTRUKTE eval gt define myNot lambda arg cond arg FE t t eval gt myNot and Ja fL Hinweis not und null Die leere Liste und der Wahrheitswert false sind in PLT Scheme DrSche me zu unterscheiden nicht in allen LISP Systemen eval gt null list gt t eval gt not list gt f Im Sinne einer m glichst kleinen Konstrukte Menge k nnten wir auf ein Konstrukt verzichten eval gt define myNull lambda liste eq liste list eval gt myNull gt t eval gt myNull 7 gt f eval gt myNull t gt f Zur besseren Lesbarkeit verwenden wir trotzdem beide Das nul1 Kon strukt zum Pr fen einer leeren Liste und das not Kon
102. VI Programming Languages for AI HeurisTech Pres s William Kaufmann 1982 Clemens Beckstein Integration objekt orientierter Sprachmittel zur Wissensre prasentation in LISP Institut fur Mathematische Maschinen und Datenverarbei tung Friedrich Alexander Universitat Erlagen Nurnberg Diplomarbeit im Fach Informatik 1985 E Beichter O Buchegger O Herzog N E Fuchs SLAN 4 A Software Specifi cation and Design Language in Floyd Kopetz 1981 S 91 108 Fevzi Belli Einf hrung in die logische Programmierung mit Prolog Mannheim Wien Z rich Bibliographisches Institut 2 Auflage 1988 Fevzi Belli Hinrich Bonin Qualit tsvorgaben im Hinblick auf Softwarefehler in M Bartsch D Hildebrand Hrsg Der EDV Sachverst ndige Workshop der GRVI Schmitten 1986 Stuttgart B G Teubner 1987 S 172 198 487 488 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 LITERATURVERZEICHNIS Fevzi Belli Hinrich Bonin Probleme bei der Hinterlegung wissensbasierter Sy steme bez glich ihrer Dokumentation Erst berlegungen und Thesen in D J Hildebrand T Hoene Hrsg Software Hinterlegung in der Insolvenz Workshop der DGIR Stuttgart 1988 Stuttgart B G Teubner 1989 S 29 51 Hinrich E G Bonin Software Konstruktion mit LISP Berlin New York Walter de Gruyter 1991 ISBN 3 11 011786 X G Booch Object oriented Analysis a
103. Variable des lambda Konstruktes das mit call cc appliziert wird Die Funktions weise des call cc Konstruktes erl utern wir anhand der obigen Kom position F G H Foo Darauf aufbauend wird gezeigt dass das call cc Konstrukt als eine allgemeine Kontrollstruktur betrachtbar ist die beliebige Spr nge in die Zukunft und Vergangenheit einer Abar beitung erm glicht Mit dem call cc Konstrukt ist daher das klassi sche LISP Sprung Paar CATCH und THROW leicht abbildbar Abschnitt 2 5 4 S 300 Vorab definieren wir f r unsere Kompostion F G H Foo ein simples Beispiel wie folgt eval gt define Foo 7 eval gt define H lambda N display Funktion H display N newline N 1 eval gt define G lambda N display Funktion G display N newline N 1 eval gt define F lambda N display Funktion F display N 2 5 ABBILDUNGSOPTION FUNKTION MIT UMGEBUNG 287 newline N 1 eval gt F G H Foo Funktion Funktion Funktion 10 7 8 9 MQ G Die Zukunft gesehen vom Zeitpunkt der Abarbeitung von H aus speichern wir als globale Variable KONTROLLWISSEN BEI H Die se Variable erh lt den Wert ber das call cc Konstrukt mit Hilfe des set Konstruktes Bei unserem call cc Konstrukt ist die zukunft an die lambda Variable Fortsetzung gebunden so dass wir sie beim Ab arbeiten von call cc an die globale Variable binden k nnen eval gt defi
104. Verwendungsanforderungen anwendungsspezifischen Opera tionen abzuschirmen In LISP kann diese Schnittstelle verheimlichen ob nur auf die Wert zelle eines Symbols zugegriffen oder ein lambda Konstrukt appliziert wird Im ersten Fall haben wir es mit dem Zugriff auf ein passives Datum zu tun Im zweiten Fall geht es um eine Funktionsanwendung d h um ein aktives Datum 2 6 GENERIERTE ZUGRIFFSKONSTRUKTE 309 Beide Arten von Zugriffskonstrukten sind mit der Datenstrukturdefi nition automatisch generierbar Das define struct Konstrukt erzeugt passive Zugriffskonstrukte Abschnitt 2 6 2 S 309 Das Generieren von aktiven Zugriffskonstrukten aktiven Slots ist Bestandteil des Klassen Instanz Konzeptes Zum Verst ndnis des define struct Konstruktes betrachten wir erneut unsere Kontenverwaltung Abschnitt 2 7 S 319 Dabei kon struieren wir die neue Struktur Verwahrkonto aus der definierten Struk tur Konto Verdeutlicht wird damit der Vererbungsmechanismus des define struct Konstruktes gt Abschnitt 2 6 3 S 314 2 6 2 define struct Konstrukt Mit dem define struct Konstrukt auch defstruct genannt z B in Common LISP oder define structure in PC Scheme definieren wir eine Datensatz Struktur aus Feldern engl slots mit gegebenen falls voreingestellten Werten engl default values gemeinsam mit ihren Selektoren Pr dikaten und Mutatoren Das define struct Konstrukt erm glicht den Zugri
105. Wert Unbekannt annehmen Fall 2 Verbaler Text mit Bezeichnern A1 Das Programm Plausibel berpr ft die drei Datenelemente Element 1 Element 2 und Element 3 3 1 TRANSPARENZ DER DOKUMENTATION 397 ET Plausibel Bl Element 1 falsch B2 Element 2 falsch B3 Element 3 falsch Fehlernachricht F01 Fehlernachricht F02 Plausibel nimmt Wert wol Unbekannt an Legende lt gt Abschnitt 13 S 80 Mehrtreffer Entscheidungstabelle mit der Abarbeitungsfolge R1 R2 R3 J Ja Bedingung trifft zu Irrelevant Anwort hat keinen Einfluss auf die Wahl der Regel X Aktion ist zu vollziehen Tabelle 3 7 Beispiel Mehrtreffer ET Plausibel A1 1 Ist Element 1 falsch gibt Plausibel die Fehlernachricht FO1 aus A1 2 Ist Element 2 falsch gibt Plausibel die Fehlernachricht FO2 aus A1 3 Ist Element 3 falsch nimmt Plausibel den Wert W01 Unbekannt an Fall 3 Formalisierter Text mit Bezeichern Tabelle 3 7 S 397 In den Fallen 2 und 3 ist jede einzelne Anforderung direkt angeb bar Jedes nachfolgende Dokument z B der Quellcodetext kann sich auf diese Identifizerung stiitzen Bei einer Modifikation sind die Ande rungsbereiche problemlos adressierbar z B Fall 2 A1 3 Wert W01 Unbekannt Fall 3 ET Plausibel A3 Wert W01 Unbekannt 3 1 4 Zusammenfassung Namen Kommentare und Ver weise Die Konstruktions und Konstruktions Prozessdokumente sind wesent lic
106. Wheel module Chart Wheel scheme require slideshow require slideshow flash require slideshow code require scheme class scheme gui base provide Chart Wheel define Chart Wheel lambda let fontBig make object font 40 3 3 NOTATION MIT UML 435 modern normal bold fontSmall make object font 20 modern italic normal vc append pin over rectangle 600 150 0 0 vc append text Characteristic fontBig 50 0 0 hline 600 0 text weight double fontSmall 20 0 0 text material fontSmall 20 0 0 hline 600 0 bitmap build path D bonin scheme image Vererbungspfeil gif hb append 200 text Component null 30 0 0 vline 0 100 blank 155 0 hline 800 0 ht append 400 vline 0 50 vline 0 50 vline 0 50 ht append 20 pin over rectangle 400 120 V String Aluminium 0 0 vc append text Rims fontBig 50 0 0 hline 400 0 text fontSmall 20 0 0 hline 400 0 pin over rectangle 400 120 436 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN 0 0 vc append text Hub fontBig 50 0 0 hline 400 0 text tontSmall 20 0 0 hline 400 0 pin over rectangle 400 120 0 0 vc append text Spoke fontBig 50 0 0 hline 400 0 text tontSmall 20 0 0 hline 400 0 text produceQuantity fontSmall 20 BED ht append 400 vline 0 50 vline 0 50 vline
107. X Damit erhalten wir das folgende Y Konstrukt eval gt define Y lambda F let G lambda H lambda X C12 AE AyD eo G G Das Erlauterungsbeispiel die Summe der numerischen Elemente ei ner Liste ergibt mit dem Fixpunktoperator Y und der eingesetzten Sum Definition damit folgende Losung eval gt let S Y lambda Fkt lambda Lst cond null Lst 0 284 KAPITEL 2 KONSTRUKTIONEN number car Lst car Lst Fkt cdr Lst e Fke cdr Lse S Zahlungen gt 80 0 Diese Y Definition hat die oben geforderte Eigenschaft eines Fixpunkt operators Das Y Konstrukt erf llt die folgende Gleichung F S 279 eval gt equal F Y F Zahlungen Y F Zahlungen gt FC Der bisherige Y Operator ist definiert um eine rekursive Funktion einzurichten Damit eine Erweiterung auf zwei gegenseitig rekursive Funktionen moglich wird andern wir die Y Definition wie folgt eval gt define Y lambda F let G lambda H R lambda X R H H F X G G F Es wurde eine zus tzliche lambda Variable R eingef hrt damit F stets als Argument verwendet wird Diese Y Definition hat den selben Ef fekt Allerdings hat G eine zus tzliche 1 ambda Variable So ist es m glich dass G mit mehr als einer Funktion auf einmal umgehen kann Zum leichteren Verstehen benennen wir in Y die Funktionen um und zwar H in G eval gt define Y lambda F let G lambda G
108. Zei chen eval gt F cdr F cons 1 0 p F cdr lambda x y lambda c c x y 1 0 F cdr lambda c c 1 0 lambda x x False lambda c c 1 0 lambda c c 1 0 False False 1 0 lambda W F F 1 0 0 Fixpunktoperator Y Wir betrachten jetzt Funktionen die sich selbst als Argument haben Der sogenannte Fixpunktoperator Y ist eine solche Funktion Zu seiner Erl uterung nehmen wir als Beispiel an dass die Summe der numeri schen Elemente einer Liste zu berechnen ist Die Beispielliste nennen wir Zahlungen eval gt define Zahlungen 10 00 Dib1se 5 00 55 00 Dubilos 2 00 8 00 278 KAPITEL 2 KONSTRUKTIONEN Mit dem Iterationskonstrukt for each und einer Hilfsvariablen Ak kumulator ist die Summe einfach ermittelbar eval gt let Akkumulator 0 for each lambda x if number x set Akkumulator Akkumulator x x Zahlungen Akkumulator gt 80 0 An Stelle des iterativen for each Konstruktes mit dem eingebette ten Modifikator set Zuweisungsoperator definieren wir eine rekur sive Funktion eval gt define Summe lambda Liste cond null Liste 0 number car Liste car Liste Summe cdr Liste t Summe cdr Liste eval gt Summe Zahlungen gt 80 0 Zur Vermeidung einer globalen Funktion ist Summe jetzt als lokale Funktion innerhalb eines lLetrec Konstruktes definiert eval gt letrec Su
109. Zusammenhang von einer Pseudocode Notation weil die formu lierten Konstrukte prinzipiell noch nicht lauff hig sind Sie enthalten 2 4 ABBILDUNGSOPTION ZEICHENKETTE UND SYMBOL 261 Formulierungen die spater noch zu prazisieren sind Wir fassen hier je doch die Pseudo Code Notation nur als eine syntaktische Erleichterung auf und unterstellen eine lauff hige Notation Wir definieren mit Hilfe des Konstruktes Mustervergleich einen Pseudocode Vor bersetzer Unser P Code Konstrukt kann folgende Pseu docode Notationen in LISP Konstrukte bersetzen e Alternative S 80 if then else fi 1 then 1 e Iteration gt S 89 while do od do until od Diese Pseudocode Angaben betrachten wir als eine Musterbeschreibung Wir formulieren z B f r die Alternative das Muster if P then Ja else Nein Passt das Muster dann sind die Mustervariablen an die aktuellen Werte gebunden Unser P Code Konstrukt braucht nur die Ja und Nein Werte an die entsprechenden Stellen des geeigneten LISP Konstruktes zu setzen Da eine Mustervariable mit einem Stern die abgedeckten Elemente zu einer Liste zusammenfasst befindet sich das erste abgedeckte Ele ment in dieser Liste in funktionaler Stellung Es w rde als Operator interpretiert Dies verhindern wir durch das Einf gen des begin Kon struktes in die Ja bzw Nein Liste eval gt P Code if P then A B C else DEF fi gt if P begin A B
110. auch Zahlatom genannt Z B 77 oder 67 23 notiert mit optionalem Vorzeichen und ge folgt von einer oder mehreren Ziffer n und optionalem Dezimal punkt 3 ein Zeichen engl character Z B a dargestellt als Nummernzeichen engl sharp sign ge folgt von einem Schr gstrich engl backslash und gefolgt von dem jeweiligen Zeichen 4 eine Zeichenkette engl string Z B Programmiersprachen bleiben bedeutsam notiert als doppeltes Hochkomma gefolgt von keinem einem oder mehreren Zeichen und abgeschlossen wieder mit einem doppelten Hochkomma 5 eine Liste von symbolischen Ausdr cken und Z B A B oder Abbuchen Meyer AG 0 10 notiert als ffnende Klammer gefolgt von keinem einem oder mehreren sym bolischen Ausdr cken und einer schlie enden Klammer 6 abh ngig vom jeweiligen LISP System weitere Typen und Struk turen Z B Vektoren spezielle Symbole f r Boolsche Wahrheitswerte oder Umgebungen Ein LISP Programm ist ein symbolischer Ausdruck der sich aus sym bolischen Ausdr cken zusammensetzen kann die sich wiederum aus symbolischen Ausdr cken zusammensetzen k nnen usw Ein LISP Pro gramm besteht letztlich aus zusammengesetzten symbolischen Ausdr ck en einfachen Typs Diese Typen haben Eigenschaften die unabh ngig von den Implementationsdetails des jeweiligen LISP Systems Abbil dung 1 3 S 16 verstehbar sein sollten Jeder symbolische Ausdruck ist eine Datenstruktur und gleichzeitig
111. buchen gt Ist die Kontonummer angegeben J N J Ist die Kontonummer kleiner gleich 40000 J N N 1 2 KOMBINIEREN VON KONSTRUKTEN 83 ET Auszahlung buchen Bedingungen eval gt define B1 lambda print Ist die Kontonummer angegeben J N read gt B1 eval gt define B2 lambda print Ist die Kontonummer kleiner gleich 40000 J N read eval gt define B3 lambda print Ist der Betrag groesser gleich 50 00 EUR J N read eval gt define BA lambda print Ist der Zweck angegeben J N read Aktionen eval gt define Al lambda print Dem Chef vorlegen eval gt define A2 lambda print Zurueck an die Fachabteilung schicken eval gt define A3 lambda print Umkontieren auf Konto SONSTIGES eval gt define A4 lambda print Vorgang an Abteilung 2 abgeben eval gt define A5 lambda print Buchung vollziehen ppp Regeln eval gt define ET Auszahlung buchen lambda cond eq Bl J cond eq B2 J cond eg B4 J A5 t cond eq B3 J Al t A3 A5 t A4 t cond eq B3 J A2 t cond eq B4 J A3 A5 t Al Legende Tabelle 1 14 S 82 Bedingungen und Aktionen au erhalb des Konstruktes ET Auszahlung buchen als Funktionen definiert Tabelle 1 15 Programm ET Auszahlung buchen 84 KAPITEL 1 KO
112. channel html Zu griff 2 Feb 2010 366 KAPITEL 2 KONSTRUKTIONEN Mit dem Konstruktur make async channel erzeugen wir zwei asyn chronous Channels und binden diese an die 1ambda Variablen von Server eval gt define gt Server make async channel eval gt define lt Server make async channel eval gt async channel gt Server gt t eval gt Server gt Server lt Server gt lt thread gt Mit dem async channel put Konstrukt schicken wir zwei Werte hier add und 6 in den Channel gt Server um dann das Resultat 7 ber den Channel lt Server zu erhalten eval gt async channel put gt Server add eval gt async channel put gt Server 6 eval gt printf Result a n async channel get lt Server gt Result 7 Wir besch ftigen jetzt gt Server mittels async channel put und k nnen derweil andere Dinge tun hier ein nur display Working Dann fragen wir das Ergebnis nach und beenden diese Channel Verkn p fung eval gt async channel put gt Server long eval gt display Working gt Working eval gt printf Server Computation a n async channel get lt Server gt Server Computation 7 000000000000001 eval gt async channel put gt Server quit Exkurs Parameter In PLT Scheme sind Parameter ein abgeleitetes Konzept das auf Thread Zellen im Verbund mit Continuation Marks Abschnitt 2 5 2 S 285 basiert Mit dem Konstruktor make parame
113. collects mzlib compat ss Um set car und set cdr Mutatoren Mutable Pairs nutzen zu k n nen laden wir dann noch die folgenden Bibliotheken aus Scheme R6RS require rnrs base 6 require rnrs lists 6 require rnrs mutable pairs 6 Programm Diagnose A1 Diagnose ein einfacher Regelinterpreter analysiert Aussagen die aus Bedingungen und Aktionen bestehen A1 1 Aussagen sind aus Regeln abgeleitet oder werden A1 2 beim Benutzer nachgefragt A2 Eine Regel hat A2 1 eine oder mehrere Bedingungen und A2 2 eine Aktion A3 Eine Aussage ist eine Liste bestehend aus dem Objekt seiner Ei genschaft und deren Wert 3 1 TRANSPARENZ DER DOKUMENTATION 399 A4 Diagnose ermittelt f r ein vorgegebenes Objekt und eine vorge gebene Eigenschaft den zugeh rigen Wert und A5 begr ndet diesen durch Auflistung der Bedingungen von zutref fenden Regeln E1 Abgebildete Daten strukturen El 1 lt aussage gt vgl A3 lt objekt gt lt eigenschaft gt lt wert gt E1 2 lt aussage gt lt bedingung gt lt aktion gt vgl Al E1 3 lt regel gt lt bedingung gt vgl A2 lt bedingungy gt lt aktion gt El 4 lt regeln gt lt regelj gt lt regel gt E1 5 Regeln sind einer Eigenschaft zugeordnet putprop lt elgenschaft gt lt regeln gt Regeln E1 6 Der Wert kommt vom Benutzer wenn vgl A1 2 putprop lt eigenschft gt nachfragen t E1 7 Die Starta
114. definiert Aufgrund des let Konstruktes geh rt die Bindung der lokalen Variablen Summe nicht zu den offenen Arbeitsschritten zum Zeitpunkt der Bindung von c Definiert man Summe m gt n allerdings mit let dann umfasst die Continuation c die Bindung von Summe an den Wert 0 Man erh lt damit das folgende falsche Ergebnis eval gt H Mit let statt mit let definiert Summe m gt n 2 5 gt lt continuation gt n lt continuation gt n lt continuation gt n 2 4 Summe 5 3 Summe 4 2 Summe 3 2 5 ABBILDUNGSOPTION FUNKTION MIT UMGEBUNG 293 2 5 3 Syntaxverbesserung durch Makros Ein Makro ist ein Konstruktionsmittel zur Verbesserung der Syntax Der Begriff Makro entstand im Rahmen der maschinennahen Assembler Programmierung Kommen Zeilen z B Anweisungen Befehle oder De klarationen in einer bestimmten Reihenfolge mehrmals vor so ist es zweckm ig diese Einheit eindeutig und mnemotechnisch geschickt zu benennen Im Quellcodetext wird dann an den einzelnen Stellen nur der eindeutige Bezeichner notiert Makrobefehle verk rzen den Text we sentlich Erst bei der Interpretation bzw Compilation werden Makros aufgel st d h der jeweils ersetzte Text regeneriert Diese sogenannte Makroexpansion ist eine rein textuelle Umformung In LISP sind zwei Arten von Makros zu unterscheiden Makros und READ Makros Normale Makros expandieren in der EVAL Phase READ Makros expandieren in der REA
115. des set Konstruktes zu ndern set lt structure name gt lt slot name gt lt structure name gt lt new value gt F r unsere Kontenverwaltung Abschnitt 2 7 S 319 formulieren wir folgende Struktur eval gt define struct Konto Identifizierung Name Inhaber Adresse Inhaber Einzahlungen auto Auszahlungen auto Kontostand auto transparent mutable auto value 0 Konstruktor Mit Hilfe des Konstruktors make Konto legen wir die beiden Konten A001 und A002 an Die generierte make Konto Funk tion initialisiert die mit dem Keyword auto markierten Slots mit dem hinter aut value angegebenen Wert 2 6 GENERIERTE ZUGRIFFSKONSTRUKTE 311 eval gt define A001 make Konto 1 Leuphana Universitat D 21339 L neburg eval gt define A002 make Konto 2 Bonin D 21391 Reppenstedt Das make Konto Konstrukt erzeugt einen eigenen Datentyp Struc ture der mit dem Pr dikat struct erkannt wird Dieser struct Datentyp l sst sich in einen Vektor konvertieren und dann entsprechend weiter behandeln eval gt A001 gt struct Konto 1 Leuphana Universit t D 21339 L neburg 0 00 eval gt struct A001 gt t eval gt struct gt vector A001 gt struct Konto 1 Leuphana Universit t D 21339 L neburg 0 0 0 eval gt vector ref struct gt vector A001 2 gt Leuphana Universit t Pr dikat Das generierte Pr dikat Konto erkennt Obj
116. ein syntaktisch korrektes LISP Programm im Sinne einer kontextfreien Analyse Ein LISP Programm bewirkt nichts anderes als symbolische Ausdr cke ein und auszugeben neu zu konstruieren zu modifizieren und oder zu vernichten Die LISP Syntax ist durch die Regeln zur Bil dung symbolischer Ausdr cke definiert Die Liste ein symbolischer Aus druck kann sich wiederum aus Listen zusammensetzen Die LISP Syn tax ist aufgrund dieser rekursiven Definition sehr einfach Tabelle 1 9 S 67 18 KAPITEL 1 KONSTRUKTE Beispiele fur Listen Franz Meyer GmbH Hans Otto OHG Abteilung 3 t E t O Eine gueltige Liste ist dies mit Zahlatom 12 A B 1 23 45 67 8 Q9 Beispiel fur eine unvollstandige Liste Dies ist nicht eine Liste Dieser Listennotation fehlt die ffnende Klammer am Anfang Um zu erkennen ob eine g ltige Liste vorliegt bedarf es der Zuord nung der ffnenden Klammern zu den schlie enden Klammern Nur wenn die Zahl der ffnenden Klammern gleich der Zahl der schlie enden ist kann eine oder k nnen mehrere Listen vorliegen Diese Be dingung ist notwendig jedoch nicht hinreichend wie der folgende Fall zeigt Keine Liste Keine Liste da falsche Klammernfolge Ein Verfahren zum Erkennen zusammengeh render Klammern ist da her erforderlich Es stellt fest ob es sich um eine oder mehrere Listen handelt oder keine ordnungsgem e List
117. eine cons Zelle als Wert hat lt modifizierte zelle gt cons Zelle mit dem Wert von lt sexpr gt im car oder cdr Teil Die beiden Mutatoren set car und set cdr haben die Aufga be dem car bzw cdr Teil einer existierenden cons Zelle einen neuen Wert zu geben Dazu werten sie ihre Argumente aus Da wir sie nur f r diesen Nebeneffekt verwenden sollten ist ihr eigener Wert prinzipiell nicht spezifiziert Hinweis set car und set cdr Konstrukt in Scheme Damit diese Konstrukte in PLT Scheme DrScheme zur Verf gung stehen ist die die Bibliothek f r Mutable Pairs von Scheme R6RS vorab zu laden oder die Sprache R5RS zu w hlen Wird mit R6RS gearbeitet werden Kon strukte in geschweiften Klammern ausgegegeben eval gt require rnrs base 6 eval gt require rnrs mutable pairs 6 In vielen LISP Implementationen so z B in Common LISP haben diese Mutatoren die klassischen Namen rplaca Akronym f r RePLAce the CAr of und rplacd Akronym f r RePLAce the CDr of 4In PLT Scheme DrScheme ist der Wert void Daher gilt z B void set car Foo 7 gt t Zum require Konstrukt Abschnitt 2 7 1 S 320 Geschweifte Klammern sind den runden Klammern gleichzusetzen ebenso die eckigen Klammern S 6 2 2 ABBILDUNGSOPTION LISTE 165 Ausgangssituation define ARBEITSPLAN list Element 1 Element 2 Element 3 sone a C T Element 1 Element 2 Eleme
118. erl utert Die map Konstrukte rea lisieren die Iteration indem sie eine Funktion wiederholt auf eine Liste von Argumenten anwenden Das do Konstrukt gliedert sich in drei Definitionsbereiche eval gt do Zustandsvariablen Endebehandlung Verarbeitungsk rper 1 Zustandsvariablen Die Definition einer Zustandsvariablen gliedert sich in die folgen den drei Teile a lt variable gt Namen der Variablen 1 2 KOMBINIEREN VON KONSTRUKTEN 91 b lt init_sexpr gt Symbolischer Ausdruck an dessen Wert die lt variable gt zu Beginn der Iteration gebunden wird Es han delt sich um den Initialwert fiir die lt variable gt c lt iter_sexpr gt Symbolischer Ausdruck der bei jeder Wie derholung evaluiert wird und an dessen Wert lt variable gt gebunden wird Es handelt sich um den Iterationswert In krement oder Dekrement ftir die lt variable gt 2 Endebehandlung Die Definition der Endebehandlung entspricht einer Klausel des cond Konstruktes Zuerst wird die Abbruchbedingung lt exit gt evaluiert und falls ihr Wert ungleich false ist wird die Sequenz von symbolischen Ausdr cken lt exit_sexpr gt lt exit_sexprn gt der Reihe nach von links nach rechts evaluiert Der zuletzt ermit telte Wert ist der Wert des gesamten do Konstruktes 3 Verarbeitungsk rper Eine Sequenz von symbolischen Ausdr cken lt body_sexpr gt lt body_sexprm gt die der Reihe nach ausgewertet werden
119. es entsprechende Listen Vorab definieren wir mit Programmfrag ment 1 4 S 56 zwei Kunden einen Lieferanten und ein Kassenkonto Um in diesem Beispiel das Symbol Meyer AG als Kunde zu erken nen ben tigen wir einen Selektor f r das erste Element einer Liste und ein Konstrukt das auf Gleichheit testet Im Zusammenhang mit dem ben tigten Selektor erl utern wir zus tzlich den korrespondierenden Konstruktor Selektoren car und cdr Das klassische Pure LISP basiert auf den beiden Selektoren car histo risch bedingte Abk rzung f r Contents of Address part of Register pho netisch ka und cdr Contents of Decrement part of Register pho netisch kd Sie erm glichen es die Teile einer Liste zu selektieren Dabei hat das car Konstrukt das erste Element der Liste d h den soge nannten Kopf und das cdr Konstrukt die Restliste als Wert Diese car cdr Sprechweise bezieht sich auf die klassische Repra sentation von Listen d h auf Adressen im Rechner lt gt Abschnitt 2 2 S 160 Sie sollte jedoch nicht den Blick daf r verstellen dass Listen ab strakte Formalobjekte sind deren Implementation zun chst untergeord nete Bedeutung hat Plakativ formuliert Bei der Konstruktion besch f tigen wir uns mit abstrakten Formalobjekten und nicht mit bekannten Adressen 1 2 KOMBINIEREN VON KONSTRUKTEN 57 eval gt car Meyer AG gt Kunde eval gt car cdr Meyer AG gt Daten zur Meyer AG eval gt car Schulze G
120. eval gt 1 2 Alter Wert gt ERROR 1 1 EINFUHRUNG HANDHABUNG VON KONSTRUKTEN 33 Nichtnumerischer Operand fur eine arithmetische Operation Betrachten wir einen symbolischen Ausdruck als gegebenes Konstrukt als einen bereitgestellten Baustein zur Abarbeitung einer spezifizierten Aufgabe dann werden Angaben ben tigt ber l 2 3 Hinweis zu 1 zu 2 die Eingabe Schnittstelle den Ausgabe Wert und ber die Nebeneffekte Mehrere Ausgabe Werte engl multiple values Manche LISP Systeme z B Common LISP gestatten als Ergebnis des eva luierens die R ckgabe von mehreren Werten Da mehrere Werte hilfs weise in einer Liste zusammenfassbar sind betrachten wird diese Option nicht weiter Schnittstelle Die Kenntnis der Schnittstelle ist f r die Wahl korrek ter Argumente notwendig Wert Zumindest muss der Typ des symbolischen Ausdrucks be kannt sein den wir als Wert des evaluierens erwarten wenn wir diesen Wert als Argument f r ein weiteres Konstrukt einsetzen wol len Bekannt sein muss z B ob das Konstrukt eine Zahl ein Sym bol oder eine Liste als Wert hat Beispiel f r einen falschen Argument Typ eval gt 3 define Meyer AG 245 34 4 gt ERROR define not allowed in an expression context Die Additionsfunktion erfordert numerische Argumente Kein R ckgabewert des Konstruktes define Meyer AG 245 34 Es kommt wegen der Inkompatibilit t mit de
121. eval gt define pull lambda D set cdr Mein assq Drawn D list 1 car cdr Mein assq Drawn D eval gt define push lambda D set cdr Mein assq Drawn D list 1 car cdr Mein assq Drawn D eval gt Breite L nge H he und Anzahl define W 50 0 eval gt define L 70 0 eval gt define H 80 0 eval gt define D 4 eval gt Eine Schublade define MyDrawer Drawer WD L D H D eval gt Vier gleiche Schubladen define Drawers make vector D MyDrawer eval gt Der Schreibtisch define MyDesk Desk W L H Drawers Bemerkenswert ist dass fiir das Erhohen des Zahlers Drawn die ge wahlte Datenstruktur recht aufwendig ist Die notwendigen Selektoren 3 5 PRIMAR OBJEKT ORIENTIERUNG 451 sind relativ m hsam zu durchschauen Wenn auch auf die andernen Ei genschaften wie beispielsweise die H he einer Schublade zugreifbar gemacht w rden w ren weitere wenig durchschaubare Selektoren not wendig Exemplarisch bedienen wir im Folgenden die erste Schublade eval gt define D1 get Drawer 0 eval gt pull D1 eval gt push D1 evalA get Drawn D1 gt 2 Objekt orientierte Konstruktion Der Schreibtisch und die Schublade sind jeweils eine eigene Klasse wo bei die Klasse Drawer innerhalb der Klasse Desk definiert ist Der Modul Desk exportiert den Schreibtisch MyDesk mit den gleichen Ma en wie bei der imperativ gepragten L
122. funktion Verzweigung ist daher eine Funktion h herer Ordnung eval gt define Verzweigung lambda cond Zustimmung Selektor Ja Baum t Selektor Nein Baum Die Funktion Zustimmung ist mit dem case Konstrukt S 88 definiert Entsprechend der gew hlten Datenstruktur f r die Abbildung des Bin rbaums sind die Selektorfunktionen wie folgt zu definieren eval gt define Selektor Ja Baum lambda Baum car cdr Baum eval gt define Selektor Nein Baum lambda Baum dar ddr cdr Baum Mit Verzweigung als Funktion hoherer Ordnung ist das Konstrukt Navigation wie folgt formulierbar eval gt define Navigation lambda Baum cond Baumblatt Baum System Antwort Baum t System Frage Baum Navigation Verzweigung Baum Die Konstrukte System Frage und System Antwort definieren wir mit den entsprechenden Selektoren wie folgt eval gt define Selektor Frage lambda Baum car Baum eval gt define System Frage lambda Baum print Selektor Frage Baum 126 KAPITEL 1 KONSTRUKTE eval gt define Selektor Baumblatt lambda Baum car Baum eval gt define System Antwort lambda Baum print Systemantwort Selektor Baumblatt Baum In der Definition von Navigation f hrt die Applikation von Ver zweigung zur R ckgabe der anzuwendenden Selektorfunktion so dass Verzweigung Baum den zutreffenden Restbaum ermittelt Wir wenden auf diesen
123. gt Der berechnete Wert wird jetzt nur gesucht und ausgegeben Foo gt lt value gt eval gt Der Wert des lambda Konstruktes gt wird berechnet lt value gt also der Wert von lt sexpr gt ist noch nicht berechnet define Foo lambda lt sexpr gt eval gt lt value gt wird berechnet und ausgegeben Foo gt lt value gt eval gt lt value gt wird berechnet und ausgegeben apply Foo null gt lt value gt Potentiell besteht mit der Kombination quote und eval eine Alter native zur Kombination lambda und apply Die Auswertung des sym bolischen Ausdrucks lt sexpr gt wird durch das quote Konstrukt blok kiert so dass sich lt sexpr gt wie eine Konstante verh lt die mit dem eval Konstrukt zum gew nschten Zeitpunkt aktiviert wird Abschnitt 1 1 3 8 22 eval gt lt value gt also der Wert von lt sexpr gt wird nicht berechnet Die Auswertung von lt sexpr gt ist blockiert define Foo lt sexpr gt eval gt Der Wert von FOO also lt sexpr gt wird ausgewertet eval Foo gt lt value gt Exkurs Zwischenschritt Compilieren F r die Festlegung des Zeitpunktes einer Werteberechnung k nnte auch 1950 1985 eingesetzt wurde Die ALGOL Varianten beeinflussten viele Programmier sprachen z B die Sprache Pascal 1 2 KOMBINIEREN VON KONSTRUKTEN 105 der Zwischenschritt Compilieren genutzt werden wie das folgende Bei spiel skizziert
124. gt send send send lt object gt lt message gt lt message gt lt messagen gt Notwendig ware dazu die Kenntnis des Objektes an das die Nachricht gesendet wurde Dazu dient hier das Schl sselwort this eval gt define K class object field slot 0 super new define public set Slot lambda Wert set slot slot Wert this eval gt define Foo new K eval gt send Foo set Slot 4 gt P Struct sob JEEE SR ssa eval gt send send Foo set Slot 4 set Slot 5 gt struct object K re eval gt get field slot Foo gt 13 Zum Zeitpunkt des Kreierens der Instanz A002 lt gt S 330 waren die Methoden Add Einzahlung und Add Auszahlung noch nicht definiert Wir k nnten sie trotzdem auf A002 anwenden wenn das nach tr gliche Modifizieren einer Klasse auf die von ihr abh ngigen Objekte unmittelbar vererbt wird In einem solchen Fall sprechen wir von einer dynamischen Vererbung Als abh ngige Objekte gelten alle Klassen und Instanzen die im Vererbungsgraph auf der modifizierten Klasse aufbau en oder anders formuliert alle Objekte die Nachfolgeknoten im Ver erbungsgraphen sind In PLT Scheme mit der Entwicklungsumgebung von DrScheme Version 4 2 3 Dez 2009 ist die Vererbung nicht dyna misch so dass wir auf A002 die sp ter hinzugef gten Methoden nicht anwenden k nnen Hinweis CLOS Dynamische Vererbung In CLOS ist die Vererbung von Modifikationen sogar von In
125. gt lt wert gt Da die Schnittstellendefinition zu erf llen ist sind in unserem Beispiel zwei weitere Listenelemente als Argumente anzugeben 38 KAPITEL 1 KONSTRUKTE eval gt 1 Listenelement ergibt Funktion lambda Alter Saldo Abbuchungsbetrag Alter Saldo Abbuchungsbetrag 110 00 2 Listenelement ist ihr 1 Argument 50 00 3 Listenelement ist ihr 2 Argument gt 60 Wert Die Zuordnung des ersten Arguments hier 110 00 zur 1ambda Vari ablenAlter Saldo und des zweiten Arguments hier 50 00 zur Lamb da Variablen Abbuchungsbet rag wird durch die Reihenfolge definiert Die Argumente werden gem ihrer Reihenfolge an die Lambda Vari ablen gebunden Die Bindung der lambda Variablen folgt der Idee von Stellungsparametern Ein gleichzeitiges Vertauschen der Reihenfolge der nebeneffektfreien Argumente und der lambda Variablen f hrt daher zum gleichen Wert eval gt lambda Abbuchungsbetrag Alter Saldo Alter Saldo Abbuchungsbetrag 50 00 110 00 gt 60 F r den Wert des Konstruktes ist die Benennung der 1 ambda Variab len unerheblich soweit nicht Namenskonflikte mit freien Variablen auf treten N heres zur Konfliktl sung Abschnitt 2 4 4 S 259 F r das Verstehen eines Konstruktes ist die Benennung jedoch von entscheiden der Bedeutung N heres dazu Abschnitt 3 1 1 S 377 Das folgende Konstrukt hat die Symbole x und Y als lambda Variablen und bewirkt ebenfalls die obige Abbuchung
126. hat sich als marktrelevant die Unified Modeling Language UML entwickelt Urspr nglich vorgeschla Exemplarisch seien genannt G Booch Objekt oriented Analysis and Design with Ap plications 15 D W Embley u a Object Oriented Systems Analysis A Model Driven Approach 58 I Jacobsen u a Object oriented Software Engineering A Use Case Dri ver Approach 99 W Kim u a Object Oriented Concepts Databases and Applications 108 und J Rumbaugh u a Object oriented Modelling and Design 155 3 3 NOTATION MIT UML 419 Konto Legende Beispiel Konto S 329 Chart Konto Konstrukt S 421 Abbildung 3 2 UML Klassensymbol Rechteck gen von der Rational Software Corporation 149 und anschlie Rend unter der Obhut der Object Management Group OMG ist UML als ISO IEC 195011 normiert worden UML ist eine Sprache zum Spezifizieren Visualisieren Konstruieren und Dokumentieren von Artefakten eines Softwaresystems UML ist be sonders gut geeignet f r die Analyse von Gesch ftsvorg ngen business modeling Zunehmend gewinnt UML auch Bedeutung f r die Modellie rung von Nicht Software Systemen Die gro e Verbreitung von UML hat zu einer umfangreichen Sammlung von besten Ingenieurpraktiken und Mustern gef hrt die sich erfolgreich beim Modellieren auch sehr kom plexer Systeme bew hrt haben Der strikt objekt orientierte UML Standard definiert Strukturdiagram me
127. id bezeichnung define define define define define zn In nn Produkt Identifikation id Produkt Bezeichnung bezeichnung Datum letzte Einlagerung 20100101 Datum letzte Entnahme 20100101 Bestand 0 define public get Produkt Identifikation lambda Produkt Identifikation define public get Produkt Bezeichnung lambda Produkt Bezeichnung define public get Datum letzte Einlagerung lambda Datum letzte Einlagerung define public get Datum letzte Entnahme lambda Datum letzte Entnahme define public get Bestand lambda Bestand define public set Produkt Identifikation lambda set Wert Produkt Identifikation Wert define public set Produkt Bezeichnung lambda set Wert Produkt Bezeichnung Wert define public set Datum letzte Einlagerung lambda Datum set Datum letzte Einlagerung Datum define public set Datum letzte Entnahme lambda set Datum Datum letzte Entnahme Datum define public set Bestand lambda set Wert Bestand Wert super new define Lieferant mixin mixin super new field field Firmen Name unbekannt Lieferschein Nummer 0 define Bestellung mixin mixin super new field field Bestell Vorgangs Nummer 0 Bestell Datum 20100101 define Lagerplatz mixin mixin su
128. in LISP Notation verdeutlicht den skiz zierten L sungsansatz falls null x X falls null cdr x _ J cons lt letzte element gt falls Sonst Umdrehen x e lt liste ohne letzte element gt Die Formulierung f r den Sonst Fall erarbeiten wir durch folgende Schrit te wobei f r die Erl uterung angenommen wird dass an x die Liste A B C D gebunden ist 1 Restliste umdrehen eval gt Umdrehen cdr x gt D C B 2 Von Schritt 1 das erste Element entfernen eval gt cdr Umdrehen cdr x gt C B 3 Ergebnis von Schritt 2 umdrehen eval gt Umdrehen cdr Umdrehen cdr x gt BC 4 Erste Element von x also A in Ergebnis von Schritt 3 einftigen eval gt cons car x Umdrehen cdr Umdrehen cdr x Die Definition von Schritt 4 ermittelt aus der Liste A B C D die Liste A B C Damit ist entsprechend der skizzierten L sung das Konstrukt Umdrehen wie folgt notierbar eval gt define Umdrehen lambda x cond null x null null cdr x x car Umdrehen cdr x t cons Umdrehen cons car x 1 3 REKURSION ALS PROBLEMLOSUNGSMETHODE 131 Umdrehen cdr Umdrehen cdr x VI 3 eval gt Umdrehen A B C D gt D C B A Diese Definition des Konstruktes Umdrehen zeigt geschachtelte re kursive Bez ge Nur durch Rekursion und Abst tzung auf die Basiskon strukte Lambda cond cons car cdr null leere
129. in die Tabelle eingetragen Diesen Vorgang nennt man auch Internmachen ber das Einlesen des Namens des Symbols k nnen daher nur intern gemachte Symbole wie der erreicht werden Erzeugt man ein Symbol ohne es intern zu machen d h ohne Ein tragung in die Symboltabelle dann ist es sp ter durch die READ Phase nicht erreichbar Obwohl ein nicht interngemachtes Symbol ber das Einlesen seines Namens nicht referenzierbar ist kann es sehr n tzlich sein Es ist keinesfalls mit Symbolen zu verwechseln die berhaupt nicht mehr erreichbar sind und als Platzverschwendung M ll zu betrachten sind Erreichbar ist ein solches nicht internes Symbol engl uninterned symbol z B wenn es als Wert eines internen Symbols dient Ein nicht interngemachtes Symbol generiert das gensym Konstrukt Ein von gensym erzeugtes Symbol hat keine Gleichheit im Sinne von eq mit existierenden oder neu eingelesenen Symbolen Geht es daher um die Vermeidung von berschreibungen mit bestehenden oder noch entstehenden Symbolen dann ist das gensym Konstrukt angebracht eval gt gensym lt argument gt gt lt uninterned symbol gt mit 260 KAPITEL 2 KONSTRUKTIONEN lt argument gt lt symbol gt lt string gt lt symbol gt Der Symbolwert wird als Suffix Anhang des Symbolnamens verwendet Ist kein lt symbol gt bzw kein lt string gt angegeben beginnt sein PRINT Name mit g gefolgt von ei
130. konzentrieren Im ersten Fall fehlt eine stabile Basis Spezifikation im Zweiten sucht und vergleicht man und kann die Informationsf lle nicht verarbeiten Beide Situationen zei gen dass es notwendig ist unsere Aussagen in einer auf das Wesentliche verk rzten Form zu notieren Was wesentlich ist richtet sich 3 1 TRANSPARENZ DER DOKUMENTATION 3 5 1 nach den Adressaten und 2 dem Zweck des Dokumentes Adressaten Ausrichtung Die einzelnen Dokumente wenden sich an unterschiedliche Adressaten z B an Benutzer Operateure Auftraggeber Projektmanager Systemde signer Programmierer Vertriebspersonal etc Kaum jemand von ihnen liest eine Dokumentation gern freiwillig oder mehr als notig Schon aus diesem Grunde ist die Dokumentation in bew ltigbare Abschnitte zu gliedern die von den einzelnen Adressaten tatsachlich gelesen werden ICH BIN KO BIO UMWELT ENTSORGUNGS UND RECYCLING TRANSPORTINGENIE UF Wir formulieren keine Zeile ohne Annahmen ber das Vorwissen und die vertraute Terminologie des Lesers Zumeist unterstellen wir impli zit ein unscharf durchdachtes Adressatenmodell Notwendig ist jedoch hinreichende Klarheit ber das annehmbare Leserverst ndnis Welche Aspekte zu beschreiben sind und welche unerw hnt bleiben k nnen weil sie zum angenommenen Leserfundus geh ren k nnen wir nur anhand unseres unterstellten Normadressaten entscheiden Ist der Leser z B ein LISP Programmierer der
131. l l l l l Amtsleiter Krause Huhn Mitarbeiter Gans Stellvertretender Amtsleiter Schulze 2 Sachbear beiter Elster G Legende o Hauspoststation x f r den Laufmappentransport Transportweg Abbildung 2 12 Skizze der B ror ume und der Hauspoststationen 2 2 ABBILDUNGSOPTION LISTE 201 Startknoten H Zielknoten F eval gt Depth first Search H F gt H CABE F A SEE ER G H A E H WeilD keine noch zu C untersuchenden Knoten hat ist bei A weiter zu C B analysieren A E C F BI U Legende x Noch zu analysierender Knoten x Schon analysierter Knoten Abbildung 2 13 Tiefensuche f r Start H und Ziel F Namen Arbeitsliste Den aktuell expandierten Knoten speichern wir als Wert des Symbols Analyse Knoten Die Tabelle 2 6 S 202 zeigt die Ver nderung dieser Variablen bezogen auf das Durchlaufen der lokalen Funktion Tiefensuche Dar ber hinaus sind die putprop und get prop Anwendungen angegeben Die Arbeitsliste bereinigen wir um die Knoten die schon in der Liste geschlossene Knoten vorkommen Dazu verwenden wir die Funktion Dif ferenz Knoten gt Tabelle 2 6 S 202 Spalte Arbeits liste jeweils zweite Eintragung Enth lt die bereinigte Arbeits liste Knoten die auch in der Liste eroeffnete Knoten vorkom men so streichen wir zun chst diese Knoten aus der Liste eroeff nete Knoten Dann setzen wir mit append die K
132. list lt Position 1 Laenge cons string gt symbol substring String Position Position 1 Sprengen String Position 1 S kl Sprengen String 0 eval gt define Implode 3In einigen LISP System steht es direkt zur Verf gung z B in PC Scheme 2 4 ABBILDUNGSOPTION ZEICHENKETTE UND SYMBOL 2941 lambda Liste cond 1 length Liste car Liste t string gt symbol string append symbol gt string car Liste symbol gt string Implode cdr Liste Die folgenden Beispiele zeigen die Umsetzung der PRINT Repr sen tation in die Elemente einer Liste bzw ihre Zusammenfassung zu einem Symbol eval gt Explode Wer gt Wer eval gt Explode Was gt Was eval gt Implode a b c gt abc eval gt Explode a b c gt a b e eval gt Implode Explode a bc gt a b c Das Konstrukt Mustervergleich arbeitet sowohl mit Mustervaria blen als auch mit den einfachen Deckelementen Fragezeichen und Stern Es bietet sich daher an in einem ersten Schritt die Unterschiede in der Notation im Muster in eine einheitliche Notation zu berf hren Dazu definieren wir ein Konstrukt Analyse Literal Atom Eine Muster variable bzw ein einfaches Deckelement wird in eine zweielementige Liste transformiert Ihr erstes Element ein Fragezeichen bzw ein Stern gibt den Typ an Im Fall der Mustervariablen ist das zweit
133. lt struct gt Datenstruktur Konto bzw Verwahrkonto Instanz der jeweiligen Datenstruktur Konto bzw Verwahr konto Notation angelehnt an Unified Modeling Language UML Abschnitt 3 3 S 418 Abbildung 2 21 Skizze einer Vererbung von Datenstrukturen eval gt Verwahrkonto Name Inhaber V001 gt ERROR reference to an identifier before its definition Verwahrkonto Name Inhaber eval gt Konto Name Inhaber V001 gt Meyer In der Abbildung 2 21 S 316 stellt der Pfeil mit der ausgepragten Spitze einen gerichteten Grafen dar in dem die Datenstruktur Definitio nen die Knoten symbolisiert durch Rechtecke sind Die mit dem ge nerierten Konstruktor hier make Konto oder make Verwahrkonto erzeugten Konten z B A001 oder V001 sind Auspr gungen der jewei ligen Datenstruktur Sie sind als unterstrichene Namen in Rechtecken dargestellt Solche Auspr gungen werden in der objekt gepr gten Ter minologie als Instanzen eines Daten Typs oder auch einer Klasse hier der Datenstruktur bezeichnet Die jeweils definierten Slots Felder in klusive Feldwerten werden entlang der Pfeilrichtung geerbt Entsprechend dieser Vererbungshierarchie sind die Operationen der Struktur Konto auch auf Instanzen der Struktur Verwahrkonto an wendbar Die Definition eines Describe Verwahrkonto Konstruktes kann daher auf dem obigen Describe Konto Konstrukt aufbauen Es bedarf nur noch eines Zusatzes der die beiden neuen Felder Buch ungsgr
134. lt wert gt ge bunden Zur Diskussion der Vor und Nachteile einer Unterscheidung der Bindung eines Funktionswertes von einem sonstigen Wert z B 70 oder 3 Zus tzlich besteht die Gefahr dass eine LISP Implementation die syntaktische Vereinfachung nicht in diese Langform transformiert z B Kyoto Common LISP 195 p 105 oder ltere PC Scheme Versionen die in ein NAMED LAMBDA Konstrukt transformieren Wir halten fest Das 1ambda Konstrukt ist in zwei Rollen zu betrach ten 1 1 EINFUHRUNG HANDHABUNG VON KONSTRUKTEN 41 1 Funktionale Abstraktion d h Definition einer Funktion a anonyme Funktion lambda b benannte Funktion define lt symbol gt lambda 2 Applikation d h Anwendung einer Funktion a anonyme Funktion lambda b benannte Funktion lt symbol gt Im folgenden erweitern wir die Funktion Abbuchen um die Fort schreibung des Kontos Dazu wird ein Beispielkonto Meyer AG mit dem Anfangswert 1000000 00 initialisiert eval gt define Meyer AG 1000000 00 Wendet man die Funktion Abbuchen an dann ist festzustellen dass wir fur die Abbuchung eine bleibende Zustandsanderung des Kontos ben tigen Die Zustands nderung ist bisher nicht als Rechenvorschrift in dem Abbuchen Konstrukt definiert eval gt Abbuchen Meyer AG 300000 00 gt 700000 0 erste Abbuchung eval gt Abbuchen Meyer AG 800000 00 gt 200000 0 zweite Abbuchung sch n f
135. lues verkn pft Zur Nutzung in PLT Scheme ist die besondere Bibliothek hashtables 6 erforderlich d h eval gt require rnrs hashtables 6 In dieser Hash Tabelle kann jedes Objekt als Key dienen vorausgesetzt es gibt daf r 1 Eine Funktion die das Objekt in ein exaktes Integerobjekt berf hrt hash function 2 Eine Funktion die einen nachfragenden Key mit dem in der Tabelle auf Gleichheit berpr ft equivalence function F r Standardf lle gibt es einen eingebauten Konstruktor make eq hash table der mit eq auf Gleichheit testet Das folgende Beispiel zeigt ei nige Konstrukte eval gt define ht make eqg hashtable eval gt hashtable set ht A lambda Das ultimative Denkmodell eval gt hashtable set ht More Means Of Requirements Engineering eval gt hashtable set ht a lambda x print x x eval gt hashtable set ht 4711 Manchmal sehr notwendig eval gt hashtable set ht A BC 12 324 5678 91 2 3 4 eval gt hashtable set ht Bonn Berlin Hauptstadt von eval gt hashtable entries ht gt Zwei Werte Keys und Values More a 4711 A A B C Bonn Berlin Means Of Requirements Engineering lambda x print x x Manchmal sehr notwendig lambda Das ultimative Denkmodell 12345678912 3 4 Hauptstadt von eval gt hashtable ht gt t eval gt hashtable size ht gt 6 eval gt hashtable ref ht a Wenn nicht
136. member A B C D gt eval gt member B A BC D 1 3 REKURSION ALS PROBLEMLOSUNGSMETHODE gt B C D eval gt member A B A B C D gt f eval gt member A B A AB C eval gt Rekursive Definition define union sequenz lambda Liste 1 Liste 2 cond null Liste 1 Liste 2 member car Liste 1 Liste 2 union sequenz cdr Liste 1 biste 27 t cons car Liste 1 union sequenz cdr Liste 1 Liste 2 eval gt union segquenz A A B B C B D D B gt AAC BDD E eval gt Endrekursive Definition eval gt define union lambda Liste 1 Liste 2 cond null Liste 1 Liste 2 member car Liste 1 Liste 2 union cdr Liste 1 Liste 2 t union cdr Liste 1 cons car Liste 1 Liste 2 eval gt union A ABB C BDDE gt C A BEDDE eval gt union A A B C A BCD amp gt A BCD BE 133 In der endrekursiv definierten union L sung arbeitet das Pr dikat member stets das erzeugte Zwischenresultat ab und nicht nur den Wert des urspr nglichen Argumentes Liste_2 Die folgende L sung union menge verf gt ber eine lokale rekursive Funktion mit einer lambda Variablen Akkumulator eval gt define union menge lambda Liste 1 Liste 2 letrec Vereinigung lambda L 1 L 2 Akkumulator cond and null L 1 134 KAPITEL 1 KONSTRUKTE null L 27 Akkumulator null L_1 Vereinigung L 2
137. mexporr verwendet Der Modul Mimport importiert benutzt ein Konstrukt das mexport exportiert Bei der Diskussion des Verbundes von Konstruktor Selektor Pr dikat und Mutator haben wir eine Hierarchie unterstellt Abbildung 2 1 S 149 Sie ist im Sinne der Benutzt Relation zyklenfrei d h aus mimport benutzt mexpor folgt dass mexport Nicht Mimporr benutzt und dass kein in der Hierarchie unter Mexport befindlicher Modul den Modul mjmport e nutzt Au erdem gibt es einen hervorgehobenen Modul Hauptmodul mit einem besonderen Konstrukt das als erstes appliziert wird Der ge samte brige Berechnungsvorgang dynamische Ablauf erfolgt ber Be nutzt Relation Konstrukte des PLT Scheme Modul Konzeptes sind in Abschnitt 2 7 S 319 beschrieben Das dort skizzierte Import Export Konzept l sst sich zu einem Vertragskonzept Design by Contract z B 129 erweitern Damit kommt man letztlich zur Programmierentwicklung auf der Ba sis von mathematisch formulierten Spezifikationen algebraic specificati ons Das provide contract Konstrukt erm glicht die Notation von um fassenden Vertragsbedingungen Das folgende Beispiel zeigt dass das Guthaben im Modul Foo gem Vertrag stets eine positive Zahl sein muss Im Modul Bar wird das Guthaben f r die Berechnung des Umsat Sie hatten in den 70iger Jahre ihren Hype 412 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN zes genutzt und dabei werden die Vertragsbedingungen bez glic
138. mit dem Beispiel Laufmappen Transportsteuerung erl utert In einem B rogeb ude ist f r die Steue rung eines mechanischen Flie bandsystems ein Weg zwischen Start und Ziel Schreibtisch zu ermitteln Dazu programmieren wir die beiden Such algorithmen Depth First und A Abschnitt 2 2 3 S 191 162 KAPITEL 2 KONSTRUKTIONEN Beispiel Verwalten von Arbeitsvorgangen Ein Manager bearbeitet seine gr eren Aufgaben nach einem Zyklus verfahren Abhangig vom aktuellen Tagesgeschehen widmet er sich ei ne Zeit lang einem Vorgang dann geht er zum n chsten Vorgang ber Hat er alle Vorg nge bearbeitet f ngt er wieder von vorn an Fertige Vorg nge werden aus diesem Bearbeitungszyklus entfernt Neue Vorg n ge werden fallabh ngig in den Zyklus eingeordnet Zu einem Zeitpunkt to hat er z B folgende Vorg nge zu bearbeiten 1 ber die Investition Lagerhalle West entscheiden 2 Zeugnis f r den Abteilungsleiter Meier diktieren und 3 Budgetplanung f r die Zentralabteilung aufstellen Die globale Variable ARBEITSPLAN stellt diese Vorg nge und ihre Reihenfolge durch eine Liste dar eval gt define ARBEITSPLAN list ber die Investition Lagerhalle West entscheiden Zeugnis f r den Abteilungsleiter Meier diktieren Budgetplanung f r die Zentralabteilung aufstellen Der Bearbeitungszyklus k nnte auf der Grundlage dieser einfach struk turierten Liste wie folgt realisiert werden e
139. null list ref x 1 Variable lambda x and pair x eq car x list ref x 1 Symbol lambda x and pair x eq car x null list ref x 1 Variable lambda x and pair x eq car x list ref x 1 Selektoren Get Match Variable lambda x list ref x 1 Get Match Value lambda symbol getprop symbol oe se MUL ACOr Set Match Value lambda symbol wert putprop symbol t Match konstrukt Match lambda cond and Match Value Match Value wert Muster Liste null Muster null Liste t null Liste cond and Symbol car Muster null cdr Muster t and Variable car Muster null cdr Muster Set Match Value Get Match Variable 258 KAPITEL 2 KONSTRUKTIONEN car Muster null t t or equal car Muster car Liste Symbol car Muster Match cdr Muster cdr Liste and Variable car Muster Match cdr Muster cdr Liste Set Match Value Get Match Variable car Muster car Liste t Symbol car Muster cond Match cdr Muster cdr Liste t Match Muster cdr Liste t Match cdr Muster Liste t t Variable car Muster cond Match cdr Muster cdr Liste Set Match Value Get Match Variable car Muster list car Liste Match Muster cdr Liste
140. nur als Urbaustein f r den funk tionalen Konstruktor F cons eval gt define F null lambda Objekt cond and procedure Objekt eq Objekt F NULL F NULL t eval gt define F car lambda Objekt cond F null Objekt Objekt F pair Objekt Objekt F car t eval gt define F cdr lambda Objekt cond F null Objekt Objekt F pair Objekt Objekt F cdr t eval gt define F set car lambda Objekt Wert cond F null Objekt 276 KAPITEL 2 KONSTRUKTIONEN error Objekt ist leer Objekt F pair Objekt Objekt F set car Wert t eval gt define F set cdr lambda Objekt Wert cond F null Objekt error Objekt ist leer Objekt F pair Objekt Objekt F set cdr Wert t Das folgende F cons Beispiel zeigt den gewollten Nebeneffekt des Mutators F set car Seine Wirkung entspricht der von set car eval gt define Foo F cons A F NULL eval gt define Foo F cons B Foo eval gt define Baz Foo eval gt F car Foo gt B eval gt F car Baz gt B eval gt F cdr Baz gt lt procedure gt eval gt F car F cdr F cdr Baz gt lt procedure F NULL gt eval gt F set car Baz F cons 1 F NULL eval gt F car Foo gt lt procedure gt eval gt F car F car Foo gt 1 eval gt F car F cdr Foo gt A eval gt F car F cdr
141. public set Buchungsgrund lambda Text set Buchungsgrund string append Text Buchungsgrund Gemischte Initialisierung super new id 4 name name eval gt define V001 new Verwahrkonto name Otto Mustermann 338 KAPITEL 2 KONSTRUKTIONEN eval gt send V001 get Name Inhaber gt Otto Mustermann Innerhalb der Klasse Verwahrkonto wollen wir eine Methode get Kurzname Inhaber definieren und dabei die Methode get Name Inhaber der Oberklasse Konto nutzen Dazu k nnte man mit dem Schl sselwort this im send Konstrukt wie folgt formulieren eval gt define Verwahrkonto class Konto field Buchungsgrund field Bearbeiter unbekannt define public set Buchungsgrund lambda Text set Buchungsgrund string append Text Buchungsgrund super new inherit get Name Inhaber define public get Kurzname Inhaber lambda substring Nachricht an die eigene Instanz send this get Name Inhaber o 3 eval gt define V001 new Verwahrkonto id 7 name Otto Mustermann eval gt send V001 get Kurzname Inhaber gt OTU Diese L sung mit send this ist nicht besonders effizient Al ternativ dazu bietet sich eine L sung mit einem expliziten inherit Konstrukt wie folgt an eval gt define Verwahrkonto class Konto field Buchungsgrund field Bearbeiter unbekannt define public set Buchungsgrund lambda Text set Bu
142. r Kapitel Abschnitte und Unterabschnitte 7 space il Kommentar f r ein g eres Kon strukt z B Funktion space des Kon Kommentar f r das nachfolgende struktes Konstrukt lokal vorge Kommentar f r diese Zeile Falls geben Platzmangel dann n chste Zeile mit Semikolon gefolgt von einem Leer zeichen Legende space Leerzeichen in den Folgezeilen hnlicher Vorschlag in Common LISP Quelle 174 Tabelle 3 4 Eine bew hrte Konvention f r Kommentare gt Kommentar Text Das folgende Array Beispiel zeigt eine Situation bei der eine Kom mentierung notwendig ist obwohl die Kommentarzeile das Wie beschrei bt Beispiel Array initialisieren Es ist eine zweidimensionale Tabelle engl array zu konstruieren Dazu sind die beide folgenden Konstrukte Make Array und Array set definiert eval gt define Make Array lambda Max Zeilen Max Spalten let V make vector Max Zeilen do 1 0 i 1 Us 1 Max Zeilen 1 V vector set V 1 make vector Max Spalten eval gt define Array set lambda Array Zeile Spalte Neuer Wert let Neue Zeile begin vector set vector ref Array Zeile 1 Spalte 1 Neuer Wert vector ref Array 3 1 TRANSPARENZ DER DOKUMENTATION 393 Zeile 1 vector set Array Zeile 1 Neue Zeile Mit dem Konstrukt Make Array definieren wir ein Tabellenbeispiel Foo mit 4 Zeilen und 5 Spalten Das anschlie ende 1et
143. r die Meyer AG aber unsinnig denn wir erwarten den Wert 100000 00 Das set Konstrukt engl pronounced set bang ndert den Wert eines Symbols eval gt set lt symbol gt lt sexpr gt gt lt value sexpr gt Wenn ein Symbol in den erreichbaren Umgebungen existiert ersetzt das set Konstrukt seinen Wert durch den Wert von lt sexpr gt Da der bisherige Wert zerst rt wird bezeichnet man set als ein destruk tives Konstrukt Destruktive Konstrukte ver ndern Zust nde Wir sind allgemein nicht an ihrem R ckgabe Wert interessiert sondern an dem Nebeneffekt d h an der Zustands nderung Der Wert eines destrukti ven Konstruktes ist daher prinzipiell nicht spezifiziert Abh ngig vom jeweiligen LISP System wird ein Wert zur ckgegeben um dem READ EVAL PRINT Zyklus zu gen gen Abschnitt 1 1 2 S 20 Bewirkt ein Konstrukt einen Nebeneffekt dann f gen wir der Bezeichnung dieses 6c l destruktiven Konstruktes ein Ausrufezeichen hinzu In PLT Scheme ist der R ckgabewert lt void gt d h der Wert der Applikation von void Es gilt daher eq set Foo 7 void oder void set Foo 7 gt t 42 KAPITEL 1 KONSTRUKTE eval gt define Schulze GmbH 60000 00 eval gt set Schulze GmbH 1234 56 eval gt Schulze GmbH gt 1234 56 Wir k nnen die definierte Funktion Abbuchen wie folgt benutzen um den Kontostand bleibend zu ver ndern eval gt Meye
144. schlie ende Klammern Dazu m ssen wir verhin dern dass solche Sonderzeichen in der READ Phase entsprechend ihrer blichen Aufgabe interpretiert werden Damit solche Zeichen als Teil des Symbolnamens behandelt werden sind sie durch ein Fluchtsymbol zu kennzeichnen Die Zeichen ASCII 124 und ASCII 92 dienen in Scheme als Fluchtsymbole Das Zeichen wird mehrfaches Fluchtsym bol genannt Das Zeichen ist eine einfaches Fluchtsymbol Beim mehr fachen Fluchtsymbol werden vom ersten Zeichen bis zum n chsten Zeichen alle Zeichen vom READ Prozess als Symbolname interpretiert Abschnitt 3 1 1 S 377 eval gt define 5 gt eval gt define soziale Marktwirtschaft eval gt soziale Marktwirtschaft gt eval gt eval soziale Marktwirtschaft gt 5 Beispiel Mustervergleich mit Variablen fur Listen Wir betrachten erneut das Simple Match Konstrukt Abschnitt 2 4 1 S 239 f r Listen und erweitern dieses um sogenannte Mustervariablen engl match variables Das erweiterte Konstrukt nennen wir Muster vergleich Wir vereinbaren dass Symbole mit einem Fragezeichen oder einem Stern zu Beginn ihres PRINT Namens Mustervariablen sind Solche Mustervariablen decken Elemente im Pr fling ab Dabei wirken 250 KAPITEL 2 KONSTRUKTIONEN sie wie die Symbole bzw Passt das Muster dann sind die abge deckten Werte durch die Mustervariablen verf gbar Wir binden unter der Eigensc
145. set Datum letzte Einlagerung Zeitpunkt send this set Kosten Stueck send this get Kosten Stueck send this get Bestand Kosten Zugang send this get Bestand zugang define public entnehmen lambda let Abgang begin display Entnahmemenge read Zeitpunkt begin display Datum JJJIMMTT read send this set Bestand send this get Bestand Abgang send this set Datum letzte Entnahme Zeitpunkt Im Folgenden werden Klassen zusammen gemixt und exemplarisch Objekte erzeugt und Nachrichten versendet eval gt define Eisenware Eisenware mixin Verwalten mixin Stueckgut mixin Lagergut eval gt define E001 new Eisenware 1d EOO01 bezeichnung Stahlmatte eval gt send E001 einlagern gt Zugangsmenge 50 Datum JJJJMMTT 20100130 2 9 KOMMUNIKATION 351 Kosten pro Stueck 2 5 eval gt send E001 einlagern gt Zugangsmenge 6 Datum JJJUMMTT 20100131 Kosten pro Stueck 2 0 eval gt send E001 entnehmen gt Entnahmemenge 7 Datum JJJUMMTT 20100131 eval gt send E001 get Bestand gt 49 eval gt send E001 get Kosten Stueck 1 3225806451612903 eval gt define Farbe Farbe mixin Verwalten mixin Stueckgut mixin Fluessigkeit mixin Lagergut eval gt define F001 new Farbe id FOO1 bezeichnung rot eval gt send F001 get Bestand gt 0 eval gt send F00
146. simuliert und zwar in Form der Modifikation des ausgebenden lambda Konstruktes Die Buchstaben sind 4 Haufigkeits gruppen zugeordnet Ihre Einteilung entspricht dem Morsecode 7 Bei den Standardeinstellungen von PLT Scheme Version 4 2 3 spei chern wir den Modul Selbstreplikation in folgendem Pfad C Dokumente und Einstellungen bonin Anwendungsdaten PLTScheme 4 2 3 collects HEGB Selbstreplikation ss Die Datei Selbstreplikation ss hat folgenden Inhalt Erzeugung von Buchstabenketten mittels Zufallsgenerator module Selbstreplikation scheme provide Evolution Ausgang der Evolution ist das Konstrukt Kernel H ufigkeit der Buchstaben nach Morse in 4 Gruppen ne 4 wertig e t 77 3 wertig a i m n sey 2 Wertig 0 9 K 0 2 5 U V 2 I wertige b c hy 7 iD 9 7 2 92 Ende wenn Kernel l nger 80 Zeichen define Kernel lambda display n define Offset lambda let Mutation random 99 Restl cdr Kernel Rest2 cdr Restl Rest3 cdr Rest2 17Der Morsecode auch als Morsealphabet bezeichnet wurde Samuel Morse im Jahr 1833 entwickelt 326 KAPITEL 2 KONSTRUKTIONEN cond length Rest3 0 Rest3 pair Rest3 cdr Rest3 t error Kein Pair set Kernel lambda Buchstabe set Kernel append Kernel display Buchstabe cond gt length Kernel 80 error Ende lt Mutation 3 set Kernel a Mutation 4
147. sind ig eae Diese Sekund rziele sind kein Selbstzweck Wir fordern daher z B keine qualitativ hervorragende Dokumentation sondern eine angemes sene also am konomischen Prim rziel N tzlichkeit gemessene Doku mentation Die Dokumentation ist stets auch im juristischen Sinne we sentlicher Bestandteil der Konstruktion Software ohne Dokumentation ist vergleichbar mit einer Wohnung ohne Fenster Fehlt ein wesentli cher Bestandteil dann ist die bergabe unvollst ndig und das Produkt kaum nutzbar Ein wesentlicher Bestandteil ist h ufig ein wesentlicher Kostenfaktor Daher wollen wir aus Kostenerw gungen das einmal Er arbeitete m glichst mehrfach nutzen Aus diesem Wiederverwendungsziel hat sich das Baukasten Konstruk tionsprinzip entwickelt Dieses in vielen Ingenieurdisziplinen angewen dete Prinzip fordert dass eine Konstruktion aus m glichst wenigen stan dardisierten Bausteinen zu realisieren ist Das Baukasten Konstruktionsprinzip hat einen analytischen und ein en synthetischen Aspekt Das analytische Problem lautet Wie kann ei ne gegebene Konstruktion durch eine Konstruktion gleicher Leistung er setzt werden die nur Konstrukte aus der vorgegebenen Konstruktemen ge des genormten Baukastens verwendet Das synthetische Problem lau tet Welche Konstrukte aus der vorgegebenen Menge werden ben tigt und welche Verkn pfungen dieser Konstrukte sind vorzunehmen um ei ne Konstruktion mit der spezifizi
148. vom LISP System nicht ausgewertet lt gt Abschnitt 3 1 2 S 389 Die Scheme Konstrukte k nnten mit runden eckigen und geschweiften Klam mern geschrieben werden Wir nutzen diese Differenzierung im Schriftbild nicht sondern bleiben bei der klassischen Schreibweise mit runden Klammern eval gt A B eval gt A B eval gt A B C D gt A BC D C D gt A BC D C D gt A BC D Inhaltsverzeichnis 1 Konstrukte 11 1 1 Einf hrung Handhabung von Konstrukten 14 1 1 1 Syntax Symbolischer Ausdruck 15 1 1 2 Semantik Regeln zum Auswerten Evaluieren 20 1 1 3 Repr sentation von Daten und Programm Ar 1 1 4 Konstrukt Schnittstelle und Implementation 32 1 1 5 Zusammenfassung eval apply und lambda 48 1 2 Kombinieren von Konstrukten saoo 446428 50 1 2 1 Interaktion Operand Operation 52 1 2 2 Kontrollstr kt tren lt s a8 2 2 8 02 4 au au ea a nen 65 1 2 3 Zeitpunkt einer Wertberechnung 103 1 2 4 Typische Fehler 20 282 2 Oe RSS 2 REGS 105 1 2 5 Zusammenfassung let doundmap 112 1 3 Rekursion als Probleml sungsmethode 113 1 3 1 Funktionsanwendung auf die Restliste 119 1 3 2 Verkn pfung von Teilproblem L sungen 122 1 3 3 Rekursive Konstrukte f r rekursive Strukturen 124 1 3 4 Geschachtelte Rekursion 2 2 2 22222 128 1 3
149. von Scheme erm glicht damit beliebige Fortsetzungen einer begonnen Abar beitung Es gestattet quasi Spr nge in ihre Zukunft und ihre Vergan genheit Wir erl utern diese allgemeine Kontrollstruktur und behandeln den Unterschied zu einem einem einfachen GOTO Sprung Abschnitt 2 5 2 8 285 Eine hierarchische Ordnung von Umgebungen erm glicht das Arbei ten mit abgegrenzten Paketen Als Beispiel dient erneut die Kontenver waltung Abschnitt 2 7 S 319 Dabei werden Makros als syntakti sche Verbesserungen genutzt Wir befassen uns daher vorab mit der De finition von Makros gt Abschnitt 2 5 3 S 293 2 5 1 Funktionen h herer Ordnung In diesem Abschnitt vertiefen wir das Verst ndnis f r Funktionen die Funktionen als Argumente und oder als Wert haben Das Konstruie ren mit solchen Funktionen h herer Ordnung engl higher order func tion wird anhand von drei Beispielen er rtert Das erste Beispiel bil 272 KAPITEL 2 KONSTRUKTIONEN det den Listen Konstruktor cons als Funktion ab gt Abschnitt 2 5 1 S 272 Das zweite Beispiel definiert Y den Fixpunktoperator f r Funk tionen Die Y Definition hat hier die Aufgabe das Verst ndnis f r re kursive Funktionen zu vertiefen Sie erm glicht die Definition rekursiver Funktionen ohne Verwendung des define oder letrecKonstruktes Abschnitt 2 5 1 S 277 Funktionale Abbildung der cons Zelle Die funktionale cons Abbildung nennen wir F cons um eine Nam
150. von Formel und andererseits den von Bilde Summe erzeugten zu zerlegen macht sich bei einer Programm nderung erschwerend bemerkbar Dies gilt entsprechend auch f r die Selektoren Multiplikand und Multiplikator Wollen wir z B zur Infix Notation bei der Eingabe Wert f r Formel bergehen und die Pr fix Notation f r Bilde Summe beibehalten dann muss die Doppel funktion erkannt werden Jeweils passende Selektoren sind dann neu zu programmieren Im Sinne unserer angestrebten Verbundeigenschaft Abschnitt 2 1 2 S 146 gilt in dem Konstrukt Ableiten z B Erster Summand Bilde Summe 5 7 eval gt Zweiter Summand Bilde Summe 5 7 eval gt Multiplikand Bilde Produkt 2 3 gt 2 eval gt Multiplikator Bilde Produkt 2 3 gt 3 eval gt In der Programmier alltags praxis wird diese Eigenschaft einer Kon struktion kaum beachtet und selten realisiert z B die L sungen zur Ableitungsaufgabe in der oben genannten Literatur Bezogen auf das Programm Ableiten w re z B die folgende L sung weniger zweck m ig wenn als korrespondierende Selektoren Erster Summand und Zweiter Summand beibehalten werden Sie fasst die Konstruktoren Vereinfache Summe mit Bilde Summe zu einem Konstrukt Make Summe zusammen eval gt define Make Summe lambda S_1 S 2 cond and number S_1 number S 2 FSER and number S_1 zero S_1 S 2 and number S 2 zero S 2 o L Gleiche Varieble S 12 2 li
151. wann auszuf hren sind Exkurs Begriff Algorithmus Bei den theoretisch fundierten Definitionen des Alogrithmusbegriffs z B von A M Turing oder A A Markow geht es um Aufz hlbarkeit Berechen barkeit und Entscheidbarkeit In diesem Zusammenhang hat Alonzo Church nachgewiesen dass bei jeder m glichen Pr zisierung des Algorithmusbe griffs die dadurch entstehende Klasse von berechenbaren Funktionen mit der Klasse der allgemein rekursiven Funktionen zusammenf llt N heres z B 109 Im heutigen Programmieralltag z B bei der Erstellung eines Buch ungsprogrammes in Java spricht man eher vom Programm als vom Al 8 Java ist eine objekt gepr gte Programmiersprache und eingetragenes Warenzeichen der Firma Sun Microsystems 1 1 EINFUHRUNG HANDHABUNG VON KONSTRUKTEN 29 gorithmus Dabei unterscheidet man strikt zwischen den Daten Einga be Zwischen und Endgr en und dem Programm Vorschrift basie rend auf Elementaroperationen obwohl im von Neumann Rechner die Trennungslinie zwischen Programm und Daten unscharf ist Man verbin det mit dem Begriff Programm etwas Aktives wie Daten erzeugen mo difizieren oder l schen Die Daten selbst sind dabei passiv Sie werden vom Programm manipuliert Diese Unterscheidung hat f r symbolische Ausdr cke wenig Aussagekraft denn jeder symbolische Ausdruck ist ei nerseits ein Programm dessen Ausgabe Wert er im Zusammenwirken mit den EVAL Regeln definiert und andererseits das M
152. wir auf der Basis der einfachen Liste Konstruktoren Selektoren Pradikate und Mutatoren definieren dann ist vorab die Listenstruktur festzulegen d h die Bedeutung der einzelnen Listenelemente ist zu fi xieren Wenn wir annehmen dass es sich bei einer Liste um ein Kon to handelt dann ist beispielsweise festzulegen dass das 1 Element die Kontonummer das 2 Element den Kontentyp das 3 Element den Na men des Kontoinhabers etc abbilden Wir betrachten Kontonummer Kontentyp Name des Kontoinhabers etc als Attribute A zum Objekt Konto Den einzelnen Listenelementen sind dann entsprechend ihrer Reihenfolge die einzelnen Attributbeschreibungen zuzuordnen Objekt Konto lt aj gt lt a gt lt a3 gt lt a4 gt lt an gt Beschreibung der Attribute Wert in Bedeutung der Liste lt a gt Kontonummer lt a gt Kontentyp lt a gt Name des Kontoinhabers lt an gt Datum der letzten Buchung Hinweis Begriff Datenlexikon Zur Beschreibung eines Attributes geh rt in der Regel auch die Defini 184 KAPITEL 2 KONSTRUKTIONEN tion des Wertebereichs z B Kontonummer 4 stellig numerisch positiv ganzzahlig and lt 0 lt a gt lt lt a gt 9999 und zus tzliche textli che Erl uterungen z B 1 Stelle Kennziffer der Abteilung gem Organi sationsdiagramm Diese Informationen weist das Datenlexikon aus Exkurs Objekt und Wert Geht es um die destruktive nderung eines symbolischen Ausdrucke
153. zwischen einem Symbol Literalatom und einem Zahlatom Fehler beim Argument Gew nschtes Konstrukt eval gt define Neuer Listenkopf 1 2 KOMBINIEREN VON KONSTRUKTEN 109 lambda Liste cons Konto cdr Liste eval gt Neuer Listenkopf Huel 12 13 gt Konto 12 13 Notierte Konstrukte eval gt Neuer Listenkopf Huel 12 13 gt ERROR Die Funktion ist fur ein Argument definiert Sie wird aber mit drei Argumenten aufgerufen eval gt Neuer Listenkopf Huel 12 13 gt Warten Der read Prozess ist nicht beendet da das Ende einer Zeichenkette das doppelte Hochkomma fehlt eval gt Neuer Listenkopf Huel 12 13 gt ERROR Falscher Typ des Arguments Das CDR Konstrukt ist f r eine Zeichen kette nicht definiert Es erwartet eine Liste bzw ein Punkt Paar 1 1 1 eval gt Neuer Listenkopf gt ERROR Kein Argument angegeben obwohl die Funktion f r ein Argument definiert wurde Beachte Hier ist keine Angabe ungleich list eval gt Neuer Listenkopf list gt KONTO Fehler beim COND Konstrukt Gew nschtes Konstrukt eval gt define Klare Entscheidung lambda Antwort cond eq Antwort Nein eq Antwort Ja HE eval gt Klare Entscheidung Ja gt t eval gt Klare Entscheidung Enthaltung gt f 110 KAPITEL 1 KONSTRUKTE Notiertes Konstrukt eval gt define MURKS 7 lambda Antwort cond eq An
154. 0 zur ckgegebene PRINT Name diente zur Identifizierung Er wurde als eine Konstante Li teralatom betrachtet Hier wird dieser PRINT Name selbst selektiert und neu konstruiert gt Abschnitt 2 4 3 S 248 Dass leistungsf hige mat ch Konstrukte einen eigenst ndigen Denk rahmen Abschnitt 2 1 S 141 bilden skizzieren wir mit einem klei nen Vor bersetzer Precompiler oder Pr prozessor Er setzt Pseudo code Formulierungen in LISP Code um Er transformiert z B eine while do od Iteration gt S 89 in ein rekursives LISP Konstrukt Dazu ist ein neues Symbol zu generieren das keine Namensgleichheit mit an deren Symbolen hat Es darf nicht mit schon existierenden Symbolen bzw mit Symbolen die als sp tere Eingabe vorkommen verwechselbar sein Ein solches einmaliges Symbol generiert das eingebaute Konstrukt gensym Abschnitt 2 4 4 S 259 2 4 ABBILDUNGSOPTION ZEICHENKETTE UND SYMBOL 239 2 4 1 Mustervergleich Programme die Muster miteinander vergleichen sind ein klassisches Anwendungsgebiet f r LISP Die LISP Literatur befasst sich eingehend mit dem Thema Pattern Matching z B 135 S 151 ff 178 S 235 ff oder 190 S 253 ff Dabei ist anzumerken dass der Terminus Mustervergleich eine un zureichende bersetzung darstellt Er vermittelt spontan den Eindruck es wird nur verglichen im Sinne einer Klassifikation Vielmehr zielt Pat tern Matching jedoch auf ein Paradigma auf e
155. 0 50 hline 800 0 ht append 200 blank 80 0 vline 0 50 text 0 48 fontSmall 20 0 0 pin over rectangle 400 220 0 0 vc append text Wheel fontBig 50 0 0 hline 400 0 text maxNumberSpoke int 48 fontSmall 20 0 0 text rim Rims fontSmall 20 0 0 text hub Hubs fontSmall 20 0 0 text spoke Spoke fontSmall 20 0 0 hline 400 0 text fontSmall 20 0 0 3 4 PR SENTATION SLIDESHOW Kommando Tastenkombination Alt q Meta q or Cmd q Esc Right arrow Space f n or click Left arrow Backspace Delete or b 8 1 Alt g Cmd g or Meta g Alt p Cmd p or Meta p Alt c Cmd c or Meta c Alt d Cmd d or Meta d Alt m Cmd m or Meta m Shift with arrow Alt Meta or Cmd with arrow 437 end slide show if confirmed end show next slide previous slide last slide first slide select a slide show hide slide number show hide commentary show hide preview show hide mouse cursor move window 1 pixel move window 10 pixels Legende Kommandos zum Navigieren in der Slideshow Quelle http docs plt scheme org slideshow Creating Slide_Presentations html Zugriff 21 Jan 2010 Tabelle 3 11 Slideshow Kommandos eval gt require Chart Wheel eval gt Chart Wheel gt Abbildung 3 8 S 434 3 4 Pr sentation Slideshow Die im Abschnitt 3 3 1 S 419 gezeigten Grafik Optionen nutzen und er weitern wi
156. 1 das Nichtber cksichtigen des aktuellen Wertes einer Bedingung f r die Auswahl der n chsten Bedingung und 2 das wiederholte Abfragen von Bedingungen wiederholtes erzeu gen der Nebeneffekte Beispielsweise fragt das obige Konstrukt ET Auszahlung buchen siebenmal nach der Kontonummer wenn die Regel R7 zutrifft Um zu mindest nicht jeweils ber die Benutzerschnittstelle erneut die Einga ben abzufordern d h die Nebeneffekte der Bedingungen zu vollziehen k nnten die Bedingungen statt als Lambda Konstrukte direkt als Wahr heitswert definiert werden eval gt define Bl begin print Ist die Kontonummer angegeben J N read gt Ist die Kontonummer angegeben J N J Damit wird die Eingabe allerdings schon zum Zeitpunkt der Defini tion der Bedingung gefordert Eine Zeitpunktverschiebung der Auswer tung w re erforderlich N heres Abschnitt 1 2 3 S 103 F r komplexe Fallunterscheidungen gibt es im Allgemeinen weitere eingebaute Konstrukte die gegen ber geschachtelten cond Konstrukten eine vereinfachte Notation erm glichen Ein Beispiel ist das case Kon strukt Es erlaubt die Angabe von Treffern in einer Liste Definiert ist es wie folgt eval gt case lt form gt lt selector gt lt sexpri gt gt lt value gt 88 KAPITEL 1 KONSTRUKTE Zunachst wird der Ausdruck lt form gt ausgewertet Sein Wert wird suk zessiv mit jedem lt selector gt verglichen wobei lt
157. 1 set Bestand 100 eval gt get field Verfalls Datum F001 gt 20100101 eval gt define Magazin Verwalter Magazin Verwalter mixin Lagergut eval gt define MVWOO1 new Magazin Verwalter id bezeichnung eval gt send MVWOOl set Name Klaus Meyer eval gt send MVWOOl get Name gt Klaus Meyer 2 9 Kommunikation Klar ist oft bedingt die sogenannte Maschinisierung von Kopfarbeit 136 ein Zusammenwirken von mehreren bis zu quasi unz hligen Rechnern in einem Netzwerk Eine der ersten Erfolgsgeschichten mit tausenden von Rechnern im Internet ist SETI home Dabei handelt es sich um ein wissenschaftliches Experiment bei der Suche nach Ex traterrestrial Intelligence SETI Mitwirkungsurkunde Abbildung 2 24 5 352 22SETI home http setiathome berkeley edu Zugriff 3 Feb 2010 352 KAPITEL 2 KONSTRUKTIONEN Certificate of Computation This certifies that bonin has participated in the SETI home project since 15 February 2001 and has contributed 0 Cobblestones of computation 0 00 trillion floating point operations and 342 Classic workunits to SETI home s search for extraterrestrial life s Dr David P Anderson IMME Director SETI home NS 5 February 2010 Legende Mitwirkungsurkunde aus den Anfangen der Zusammenarbeit von sehr vielen Rechnern im Internet an einer gemeinsamen Aufgabe Abbildung 2 24 Kommunikation Beispiel SETI home F
158. 14 S 206 Wie immer der Weg vom Knoten zum Zielkno ten auch verl uft k rzer als die Differenz der x Koordinatenwerte kann er nicht sein h chstens gleich gro Damit wird auch die Konsistenz bedingung erf llt Sie fordert dass f r zwei beliebige Knoten K und 206 KAPITEL 2 KONSTRUKTIONEN a a ar f i va T L A Sch tzwert ro Q r N PZ A rd Startknoten 9 1 so Knoten __ A Zielknoten X Legende zur ckgelegter Weg m gliche Wege Abbildung 2 14 Differenz der X Koordinatenwerte als Sch tzung f r die k rzeste Entfernung vom Knoten zum Zielknoten K die Differenz der Sch tzwerte nicht gr er ist als die Differenz der tats chlichen Entfernungen zum Zielknoten Zum Verstehen der Aufgabe sind vorab Anforderungen Annahmen zum Entwurf und Testf lle formuliert Dabei verweist die Abk rzung A auf eine Anforderung die Abk rzung E auf eine Annahme zum Entwurf und die Abk rzung T auf einen Testfall A1 A Search ermittelt in einem angegebenen Knotennetz den k r zesten Weg von einem Start zu einem Ziel Knoten A1 1 Der Nachfolger mit dem kleinsten Wert der Funktion Ent fernungsschaetzung Start gt Ziel E2 wird als n ch ster analysiert expandiert Zweck Der beste Knoten zu erst A1 2 Es sind ein Start und ein Zielknoten anzugeben E1 Ein Knoten ist ein Symbol E1 1 Die Koordinaten eines Knoten sind als Eigenschaft Ort ge speichert E1 2 Die Nachfo
159. 2 19 S 226 Ausbalancieren eines Baums durch Rotation Beispiel zum Verstehen des Konstruktes AVL Baum Montage Programm S 229 Abbildung 2 15 Baum Fall 1 einfache Rotation Fall 2 Rechter Teilbaum vom linken Teilbaum gt neue Wurzel doppelte Rotation Vor der Rotation Nach der Rotation Balance f r G 2 Balance f r A DL G 1 f r E 1 f r sonst 1 f r AL DZ EL H Y 0 f r D A DL 1 G E ss ri D L D G A E H Y A DL EL L AL DL EL AL DZ H Y r DZ Legende Notation Abbildung 2 19 S 226 Ausbalancieren eines Baums durch Rotation Beispiel zum Verstehen des Konstruktes AVL Baum Montage Programm S 229 Abbildung 2 16 Baum Fall 2 doppelte Rotation 2 3 ABBILDUNGSOPTION VEKTOR 225 Fall 3 Rechter Teilbaum gt neue Wurzel einfache Rotation Vor der Rotation Nach der Rotation Balance f r Y 1 Balance f r Y 1 f r D A E H GA HA X Z 0 f r V 1 fur L 1 f r sonst 0 f r G 2 G L m r D L G Y A E H Y D H V Z GA HAV Z A EGA HA X m x Legende Notation Abbildung 2 19 S 226 Ausbalancieren eines Baums durch Rotation Beispiel zum Verstehen des Konstruktes AVL Baum Montage Programm S 229 Abbildung 2 17 Baum Fall 3 einfache Rotation Fall 4 Linker Teilbaum vom rechten Teilbaum gt neue Wurzel doppelte Rotation Vor der Rotation Nach der Rotation Balance f r L 1 Balance f r GA 1 f r D A E GA HA Y X Z 0 f r sonst 0 f r H 1 f r
160. 25 Richard P Gabriel Larry M Masinter Performance of Lisp Systems ACM LISP Conference New York 1982 pp 123 142 Richard P Gabriel Kent M Pitman Endpaper Technical Issues of Separation in Function Cells and Vaule Cells in LISP and Symbolic Computation Vol 1 Num ber 1 June 1988 pp 81 101 Learning LISP Engelwood Cliffs New Jersey Prentice Hall 1984 Handbuch der Firma Gnosis zu LISP auf Apple II Martin L Griss Anthony C Hearn A Portable LISP Compiler Software Practice and Experience Vol 11 1981 pp 541 605 Adele Goldberg Dave Robson Smalltalk 80 the language Reading Massachu setts u a Addison Wesley 1983 Ron Goldman Richard P Gabriel Qlisp Experience and New Directions in ACM SIGPLAN PPEALS Parallel Programming Experience with Applications Languages and Systems Volume 23 Number 9 September 1988 pp 111 123 M Gordon R Milner C Wadsworth G Cosineau G Huet L Paulson The ML Handbook Version 5 1 Paris INRIA 1984 Claudio Gutierrez PROLOG Compared with LISP ACM LISP Conference New York 1982 pp 143 149 John Guttag Notes on Type Abstraction Version 2 IEEE Transactions on Soft ware Engineering Vol SE 6 No 1 January 1980 pp 13 23 Tony Hasemer A Beginner s Guide to Lisp Workingham Bershire u a Addison Wesley 1984 Patrick J Hall How to Solve it in LISP Wilmslow England Sigma Press 1989 Robert H Halstead Jr Imple
161. 3 S 191 er rtert Anhand des relativ gr eren Beispiels Aktenverwaltung diskutie ren wir Konstrukte f r die Abbildungsoption Vektor Abschnitt 2 3 S 215 Die Option Zeichenkette er rtern wir im Rahmen der Aufgabe eines Mustervergleichs Abschnitte 2 4 1 S 239 und 2 4 2 S 241 Wir befassen uns mit dem print Namen eines Symbols als eine weitere Abbildungsoption Abschnitt 2 4 3 S 248 Erkl rt wird die Notwen digkeit ein neues Symbol als Unikat zu generieren Abschnitt 2 4 4 S 259 Dabei wird die N tzlichkeit des Mustervergleichs am Beispiel eines kleinen Vor bersetzers f r eine Pseudocode Notation demonstiert Ausf hrlich wird die Funktion und ihre Umgebung als Abbildungs option behandelt Abschnitt 2 5 S 270 Das Konstruieren von Funk tionen h herer Ordnung er rtern wir anhand der beiden Beispiele Ab bildung der cons Zelle als Funktion Abschnitt 2 5 1 S 272 und Rekursion mit dem Fixpunktoperator Y lt gt Abschnitt 2 5 1 S 277 Wir k nnen in Scheme nicht nur die Funktion selbst an ihre eigene lambda Variable binden sondern mit dem call cc Konstrukt auch die noch nicht vollzogene Abarbeitung Mit dieser sogenannten Continuati on Fortsetzung konstruieren wir Kontrollstrukturen die als Spr nge in die Zukunft und in die Vergangenheit einer Berechnung erkl rbar 2 1 VERSTEHEN EINER KONSTRUKTION 141 sind gt Abschnitt 2 5 2 S 285 Die M glichkeiten der Syntaxverbesse
162. 3 Struktogramm Wortzaehlung eval gt define Wortzaehlung lambda Wort Text cond null Text 0 eq Wort car Text 1 Wortzaehlung Wort cdr Text t Wortzaehlung Wort cdr Text eval gt define BGB 7 1 Wer sich an einem Orte st ndig niederl t begr ndet an diesem Orte seinen Wohnsitz eval gt Wortzaehlung Orte BGB 7 1 gt 2 Die L sung kann auch durch eine Entscheidungstabelle ET mit ei ner Aktion wiederhole ET dargestellt werden Tabelle 1 21 S 121 Eine solche Notation verdeutlicht jedoch nicht die rekursive Definition Diese zeigt Tabelle 1 22 S 121 Hier ist allerdings wie beim Struktogramm das Problem die Applikation der Funktion vom R ckga bewert der Funktion deutlich zu unterscheiden Dass die Iteration als Sonderfall von selbstbez glichen Funktionen betrachtbar ist verdeut licht die Rekursion mit der Funktionsanwendung auf die Restliste Wir k nnen mit dieser Notation die Konstrukte f r das klassische Mapping lt gt S 100 definieren eval gt define for each lambda funktion liste cond null liste void 1 3 REKURSION ALS PROBLEMLOSUNGSMETHODE 121 Akkumulator 0 Bl Enth lt lt text gt kein Wort J N N B2 Erste Wort im lt text gt lt wort gt J N A1 Akkumulator 1 Akkumulator X A2 lt text gt lt text reduziert UnseBnstes2weore gt A3 Wiederhole ET Wortzaehlung A4 Gebe Akkumulator aus Legende
163. 493 Kommunikationsmittel 12 Komposition 65 129 Konstante funktionale 272 Konstrukt 35 Definition 35 Konstruktion Begriff 139 Kategorie 406 objekt gepr gte 327 Konstruktor 146 Kontrollstruktur 448 lineare 98 Kopetz Hermann 490 Kopierregel 36 Kreowski H J 403 493 Krishnamurthi Shriram 469 490 Kron H 65 490 504 Krumnack Tim 460 497 Kruse Robert L 223 493 Kurtz Barry D 418 490 Kyoto Common LISP 464 label 475 lambda 362 Lamson Richard 461 488 Landin P J 47 493 Layer Kevin 491 Lebenszyklus Software 51 Leckebush Johannes 467 493 Le_LISP 465 Lesgolg Alan 495 let 72 365 let 75 letrec 76 Levin Michael I 193 494 Lewis D C 497 lexikalische Bindung 47 Liebscher Heinz 28 493 LIFO 78 list 43 list copy 181 list ref 126 list gt vector 216 Lochovsky Frederick H 418 493 Lorenson W 418 496 Lucid Common LISP 465 Luft Alfred L 403 492 Lukasiewicz J 23 MacLennan Bruce J 493 MacQueen D B 489 493 make custodian 367 make eq hashtable 189 make semaphore 363 make async channel 366 make base empty namespace 46 make base namespace 46 293 298 366 make empty namespace 46 make parameter 366 make string 246 make vector 217 Makro Expansion 296 Transformation 296 INDEX Mandelbrot Benoit B 476 494 map 101 473 Mapping function 101 Markow A A 28 Marti J B 494 Masinter Larry M 327 488 491
164. 5 eval gt mul3 add2 1 gt 9 eval gt define a2m3 lambda zahl add2 mul3 zahl eval gt a2m3 1 gt 5 eval gt Komposition zweier anonymer Funktionen lambda zahl 2 zahl lambda zahl 3 zahl 1 gt 5 Elementare Kontrollstrukturen sind 1 die Folge Sequenz 2 die Auswahl Selektion und 3 die Wiederholung Iteration Bevor wir ihre Realisierung diskutieren sind nochmals die bisher erl uterten Konstruktionsmittel in Backus Naur Form lt gt folgenden Ex kurs als Tabelle 1 9 S 67 und 1 10 S 68 zusammengestellt Sie zeigt atomare Komponenten wie Symbol und Zahl Grundprozeduren wie cons car und cdr und zus tzlich elementare Kontrollstrukturen Z B erm glicht das lambda Konstrukt das Verkntipfen von Konstrukten als Sequenz Exkurs Backus Naur Form Die von John W Backus und Peter Naur definierte Notation ist geeignet die Syntax einer Programmiersprache zu spezifizieren Eine BNF Metasprach variable auch syntaktische Einheit genannt ist eine Variable deren Wert auf Zeichen zurtickftihrbar ist die in der gegebenen Sprache hier LISP zulassig sind Aus Klarheitsgriinden sind die BNF Metasprachvariablen in spitze Klammern lt gt eingeschlossen Damit unterscheiden sich diese nonterminal symbols kurz non terminals von den Symbolen in LISP die auch als terminal symbols kurz terminals bezeichnet werden Die BNF Metasprachgleichheit hier dargestellt durch kann aufge
165. 8 Robert R Kessler LISP Objects and Symbolic Programming Glenview Illinois Boston London Scott Foresman and Company 1988 Won Kim Frederick H Lochovsky Eds Object Oriented Concepts Databases and Applications Reading Massachusetts Addison Wesley 1989 Georg Klaus Heinz Liebscher Hrsg Worterbuch der Kybernetik Frankfurt am Main Fischer Taschenbuch Verlag Original Berlin Dietz Verlag 1967 4 tiber arbeitete Fassung 1976 Dieter Kolb Interlisp D Siemens AG M nchen 17 07 85 H J Kreowski Algebraische Spezifikation von Softwaresystemen in Floyd Ko petz 1981 S 46 74 Robert L Kruse Data Structures and Program Design Englewood Cliffs New Jer sey Prentice Hall International 1984 PJ Landin The mechanical evaluation of expressions in The Computer Journal Vol 6 No 4 1964 pp 308 320 Johannes Leckebusch XLisp Die Programmiersprache der KI Profis M nchen Systhema Verlag 1988 D B MacQueen Ravi Sethi A semantic of types for applicative Languages ACM LISP Conference New York 1982 pp 243 252 Bruce J MacLennan Functional Programming Practice and Theory Reading Massachusetts Addison Wesley 1990 494 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 LITERATURVERZEICHNIS Benoit B Mandelbrot Fractals Form Chance and Dimensio
166. 85 pp 287 292 William G Wong PC Scheme A Lexical LISP MARCH 1987 BYTE pp 223 226 Taiichi Yuasa Masami Hagiya Introduction to Common Lisp Boston Orland u a Academic Press Inc orginally published in japanese 1986 Anhang C Index 7 Index 20 mO gt 6 20 A Liste 185 Abelson Harold 487 Abrahams Paul W 193 494 abstract 422 Adobe Systems 354 Aggregation 430 algebraische Spezifikation 403 ALGOL 104 Algorithmus 27 28 Aliasname 46 Allegro Common LISP 463 Allen John 22 69 271 487 Anderson John R 487 ANSI X3J13 328 ANSI IEEEStd8301984 487 append 128 apply 39 Arbeitstechnik 406 Argument 37 mehrere 40 ASCII 294 assign statement 144 assoc 185 Assoziation 428 assq 185 assv 185 async channel get 365 async channel put 365 AVL Baum 223 Backus John W 66 270 487 Backus Naur Form 66 68 backward chaining 449 Bar David Yoah 360 Barr Avron 487 500 Bartsch M 408 487 Beckstein Clemens 328 487 begin 76 473 begino 78 473 Beichter E 373 487 Belli Fevzi 390 408 449 487 488 Benennung Wert 45 Benutzt Relation 411 Berkeley Edmund C 488 Bindung 44 dynamische 47 lexikalische 47 statische 47 bitmap 430 Bitsch Gerhard 488 Blaha M 418 496 blank 432 BNE 66 Bobrow Daniel G 327 328 421 488 493 497 Body 36 Boehm Barry W 50 488 Bonar Jeffrey 495 Booch G 418 488 break thread 357 Brewka Gerh
167. Abbuchen Meyer AG 67 23 Wird das Evaluieren einer Liste blockiert dann verh lt sie sich analog zu einer Zeichenkette Sie bleibt bestehen Wir m ssten sie aus dieser Sicht der Kategorie Daten zuordnen Einpr gsam formuliert Die Quotierung blockiert die Auswertung Ein quotierter symbolischer Ausdruck entspricht einer Konstanten Beispiele zum quote Konstrukt eval gt ABC gt A B C eval gt A B C gt ERROR procedure application expected procedure given A arguments were B C Nach EVAL Regel 3 ist der Wert von 1 1 EINFUHRUNG HANDHABUNG VON KONSTRUKTEN 3l quote A gt A Dieses A ist weder der Programmcode einer Funktion entsprechend EVAL Regel 2 noch der eines speziellen Symbols ent sprechend EVAL Regel 3 eval gt sin 0 2 0 3 gt ERROR Sin expects argument of type lt number gt given list 0 2 0 3 Die Quotierung des Arguments verhindert die Auswertung von 0 2 0 3 gt 0 5 Der Sinus einer Liste ist nicht defi niert so dass eine Fehlermeldung erfolgt eval gt sin 0 2 0 3 gt 0 479425538604203 Hinweis Fl chtigkeitsfehler H ufig haben Fl chtigkeits Fehler ihre Ursache in einer vergessenen oder falschen Hochkomma Notierung Pr fen Sie deshalb zun chst ob der sym bolische Ausdruck selbst oder sein Wert gemeint ist Abschnitt 1 2 4 S 105 Das Komplement zum quote Konstrukt ist das eval Konstrukt
168. BUNG 303 lambda F G lambda X E G X eval gt define Conditional lambda P F G lambda X P X F X GX eval gt define F ADD lambda X apply X eval gt define Alpha lambda F lambda X map F X eval gt define F Length lambda X Conditional null lambda X 0 Compose F ADD Alpha lambda X 1 X eval gt F Length abc gt 3 Ersetzt man die Konstrukte Conditional Compose Alpha und F ADD dann ergibt sich Folgende Definition f r das F Length Konstrukt eval gt define F Length lambda X lambda P F G lambda X I P X F X AG yyy null lambda X 0 lambda F G lambda X F G X lambda X apply X lambda X map lambda X 1 X X eval gt F Length a b c d gt 4 304 KAPITEL 2 KONSTRUKTIONEN Beispiel Abwechselnde Auf hrung zweier Aufgaben Mit einer ab wechselnden Abarbeitung der Teilaufgaben von zwei Prozessen wird die gemeinsame Nutzung von Makro und Funktion verdeutlicht Die noch abzuarbeitenden Teilaufgaben sind als 1ambda Konstrukt an das Symbol PR gebunden eval gt define PR null eval gt define Process Stack lambda Task_List lambda cond null Task List null t begino car Task List set Task Ligt cdr Task List eval gt define Alternate lambda Execute Process Wait Process lambda let Activ Execute Process
169. Baum Baum Text Baum l1 Teilbaum 1 r teil knotenbildung Baum Key r Teilbaum Baum Text r Teilbaum l teil amp el r teil r r teil Fall 4 and lt l hoehe r hoehe Balance r Teilbaum 1 let neue wurzel linker Teilbaum r Teilbaum r l r teil rechter Teilbaum neue wurzel r r teil rechter Teilbaum r Teilbaum 1 1 r teil linker Teilbaum neue wurzel r l r teil amp r r teil knotenbildung Baum Key r_Teilbaum Baum Text r Teilbaum r l r teil r r teil l teil amp l l r teil knotenbildung Baum Key Baum Baum Text Baum I Teilbaum 1 1 r teil knotenbildung Baum Key neue wurzel Baum Text neue wurzel l teil amp l 1l r teil r l r teil amp r r teil einfuegen in AVL Baum lambda key text Baum cond leerer Baum Baum Make Baum 1 key text 234 KAPITEL 2 KONSTRUKTIONEN leerer Baum leerer Baum string ci key Baum Key Baum Make Baum Baum Hoehe Baum Baum Key Baum text linker Teilbaum Baum rechter Teilbaum Baum string ci lt key Baum Key Baum AVL Baum montage Baum einfuegen in AVL Baum key text linker Teilbaum Baum rechter Teilbaum Baum string ci lt Baum Key Baum key AVL Baum montage Baum linker Teilbaum Baum einfuegen in AVL Baum key text rechter Teilbaum Baum AVL Baum struktur zeigen lambda Baum anzahl_space letrec write space lambda n cond n 0 null t write
170. C begin D E F F r die beiden Iterationen formulieren wir die beiden Muster while P do Body od und do Body until Q od Mit den Werten der Mustervariablen P bzw Q und Body konstruieren wir eine rekursive LISP Funktion Diese Funktion nutzt das 1etrec Konstrukt zur Definiti on einer lokalen rekursiven Funktion Ben tigt wird ein Funktionsname Symbol f r den Selbstbezug Jedes Symbol das wir daf r rein zuf llig w hlen kann zu ungewollten Nebeneffekten f hren Im folgenden Beispiel haben wir unterstellt wir h tten das Symbol AAA als Funktionsname gew hlt Tritt in der Pseudo Code Formulierung zuf llig auch das Symbol AAA auf dann kommt es zu Fehlern Der erste Fall hat keine Namensgleichheit mit dem Symbol AAA der zweite hat eine solche und f hrt zu einem ungewollten Effekt Im 3 Fall verwenden wir ein Symbol das mit dem Konstrukt gensym generiert wurde und verhindern damit einen solchen Nebeneffekt 262 KAPITEL 2 KONSTRUKTIONEN Fall 1 Keine zufallige Namensgleichheit mit der Funktion AAA eval gt define I 0 eval gt define J EUR eval gt define Foo P Code do display I display J newline set I I 1 until s I 3 4 eval gt Foo gt letrec AAA lambda display I display J newline set I I 1 cond gt I 3 t AAA AAA eval gt eval Foo gt OEUR 1 EUR 2 EUR 3 EUR t Fall 2 Zuf llige Namensgleichheit mit der Fun
171. D Phase des READ EVAL PRINT Zyklus Das Hochkomma als Kurzschreibweise f r das quot e Konstrukt Abschnitt 1 1 3 S 27 ist eines von zahlreichen eingebauten READ Mak ros In m chtigen LISP Systemen z B in Common LISP kann der Be nutzer selbst READ Makros definieren Wir konzentrieren uns im folgen den auf die allgemein verf gbaren READ Makros quasiquote Kurz zeichen Achtung Backquotezeichen r ckw rtiges Hochkom ma unquote Kurzzeichen und unquote splicing Kurzzei chen Als Beispiel fiir die Verbesserung der Ubersichtlichkeit durch Makros dient das Erweitern oder Modifizieren einer bestehenden Umge bung im Rahmen einer Kontenverwaltung Wir definieren einen Namensraum Umgebung Konten Manage ment mit dem make base namespace Konstrukt S 42 N heres lt gt Abschnitt 2 7 S 319 eval gt define Konten Management lambda make base namespace eval gt Konten Management gt lt namespace 0 gt Den Namensraum Konten Management erganzen wir um die Sym bole Foo und Baz eval gt eval define Foo 1 2 Konten Management eval gt eval Foo Konten Management gt 1 2 eval gt eval define Baz Foo Konten Management eval gt eval Baz Konten Management gt 1 2 Ist ein Teil des ersten Argumentes von eval jedoch zu evaluieren hier 1 2 dann ist mit Hilfe des 1ist Konstruktes erst ein auswer tungsfahiges Argument zu konstruie
172. Die Bedingungen werden der Reihe nach von lt p gt beginnend gepr ft bis erstmals der Wert von lt p gt ungleich false ist d h als wahr inter pretiert wird Die restlichen Bedingungen werden nicht ausgewertet Ist keine Bedingung ungleich false dann ist das cond Konstrukt prinzi piell undefiniert Das jeweilige LISP System repr sentiert dann diesen Wert z B bei PLT Scheme DrScheme mit einem nicht darstellbaren Leerzeichen Abbildung 1 14 S 54 Beispiele zum cond Konstrukt eval gt define Absolutwert lambda x cond lt x 0 1 x sonst x eval gt Absolutwert 5 eval gt Absolutwert 5 eval gt define Weg unbenutzt 1 2 KOMBINIEREN VON KONSTRUKTEN 55 eval gt Anonyme Funktion mit Nebeneffekt lambda x y Anwendung der anonymen Funktion cond Ile x y set Weg Klausel xy lt xy set Weg Klausel x lt y x y lt y x set Weg Klausel x gt y y y t set Weg Klausel sonst Unbekannte Relation 12 23 Argumente gt 35 Ruckgabewert eval gt Weg gt Klausel x lt y Bewirkter Nebeneffekt eval gt define Otto false eval gt Keine Klausel trifft zu cond OCCO LIisSE 1 Klausel 2 1 last 2 Klausel eval list 3 Klausel ab Beim letzten Beispiel ist der Wert des cond Konstruktes unbestimmt weil keine der drei Klauseln zutrifft Dieser undefinierte Fall des
173. EI Symbole Abschnitt 13 S 80 Formale Vollst ndigkeits berpr fung 2 einwertige Regeln R2 und R3 lt gt 2 F lle 1 zweiwertige Regeln R1 lt gt 2 F lle gt 4 F lle 4 Regeln Tabelle 1 21 Iteration dargestellt in ET Technik Funktion Wort zaeh lung ET Wortzaehlung lt wort gt lt text gt Bl Enth lt lt text gt kein Wort B2 Erste Wort im lt text gt lt wort gt Al Wortzaehlung 0 A2 Wortzaehlung 1 call ET Wortzaehlung lt wort gt lt text reduziert um erstes wort gt call ET Wortzaehlung lt wort lt text reduziert um erstes wort gt Return Wortzaehlung Legende call Verweist auf die Funktionsapplikation ET Symbole Abschnitt 13 S 80 Formale Vollst ndigkeits berpr fung 2 einwertige Regeln R2 und R3 lt gt 2 F lle 1 zweiwertige Regeln R1 2 F lle gt 4 F lle 4 Regeln Tabelle 1 22 Rekursion dargestellt in ET Technik Funktion Wort zaehlung 122 KAPITEL 1 KONSTRUKTE t funktion car liste for each funktion cdr liste eval gt for each lambda x print x newline 1 2 3 223 1 2 3 Das map Konstrukt sammelt die Ergebnisse der Funktionsanwendung und gibt sie als Liste zur ck Dieses Sammeln bilden wir mit dem cons Konstrukt ab eval gt define map lambda funktion liste cond null liste list t cons funktion car liste map funktion cdr liste eval gt map lambda x cons x
174. EL 1 KONSTRUKTE iterative Ersatz L sungen gew hlt werden Obwohl LISP iterative Kon strukte umfasst untersttitzt LISP rekursive Losungen in besonderem Ma se Die Rekursion wird daher ausf hrlich er rtert gt Abschnitt 1 3 S 113 1 1 Einf hrung Handhabung von Konstrukten Heute ist LISP eine universelle Programmiersprache eine dialogorien tierte Software Entwicklungsumgebung eine Menge vordefinierter Bau steine Konstrukte und ein Formalismus zur Spezifikation Pr zisie rung eines Problems Die Ursprungsfassung konzipierte John McCarthy in den Jahren 1956 1958 am Massachusetts Institute of Technology MIT Cambridge Mas sachusetts lt gt 123 124 Dabei konnte er auf fr here Arbeiten zu r ckgreifen insbesondere auf die erste Listen Verarbeitungs Sprache mit dem Namen IPL Information Processing Language die Mitte der f nfzi ger Jahre von Herbert A Simon A Newell und J C Shaw entwickelt wur de Die lange Historie hat zu einer gro en Anzahl von LISP Dialekten gef hrt Abschnitt A 2 S 462 und zu mehreren Versuchen einen Standard zu definieren und diesen durchzusetzen z B Common LISP 174 oder Scheme 151 Trotz der Vielfalt existierender Dialekte gibt es einen gemeinsamen LISP Kern das sogenannte Pure LISP Typisch f r diesen Kern ist die M glichkeit anwendungsspezifi sche Funktionen mit Hilfe des A Konstruktes Abschnitt 1 1 4 S 35 definieren zu k nnen LIS
175. ETHODE 117 Bezogen auf das Laenge Konstrukt Programm in Tabelle 1 19 S 114 erhalt man folgende Untersttitzung eval gt TRACE BOTH Laenge gt OK eval gt Laenge Meyer AG Mueller OHG Schulze GmbH gt Argument 1 Meyer AG Mueller OHG Schulze GmbH gt gt gt Entering lt procedure Laenge gt Argument 1 Mueller OHG Schulze GmbH gt gt gt Entering lt procedure Laenge gt Argument 1 Schulze GmbH gt gt gt Entering lt procedure Laenge gt Argument 1 lt lt lt Leaving lt procedure Laenge gt with value 0 Argument 1 lt lt lt Leaving lt procedure Laenge gt with value 1 Argument 1 SCHULZE GMBH lt lt lt Leaving lt procedure Laenge gt with value 2 Argument 1 Mueller OHG Schulze GmbH lt lt lt Leaving lt procedure Laenge gt with value 3 Argument 1 Meyer AG Mueller OHG Schulze GmbH 3 Rekursive Definitionen sind in der Mathematik gebr uchlich Man notiert z B eine S gezahn Kurve wie folgt 0 falls x lt O x falls O lt x lt l 2 x falls 1 lt x lt 2 Saegezahnx 2 falls Ze Saegezahn x Die Abbildung 1 22 S 118 zeigt die Kurve der obigen restrekursiv de finierten S gezahnfunktion mathemathische Notation S 117 Die in der Mathematik gebr uchliche Notation ist direkt in LISP bernehmbar wobei die sequentielle Abarbeitung des cond Konstruktes einen Verzicht auf die kleiner gleich Schranken erlaubt Programm in Tabelle 1 20
176. EURE 10 TITEL PICTURE WOHNORT 10 STRASSE PICTURE 10 POSTLEITZAHL PICTURE 10 ORT PICTURE KOMMUNIKATION 10 TELEFON PLCGlURE 10 TELEFAX ETC DURE 10 E MAIL BIICEURE SONSTIGES 10 STOCKWERK PLCTURE 10 POSTFACH PrCGluURE Legende 01 10 Gruppennummern zur Strukturierung PICTURE X 30 Feld f r 30 alphanumerische Zeichen PICTURE 9 4 Feld f r eine Zahl mit 4 Ziffern Tabelle 2 9 Beispiel COBOL Datendefinition Dabei haben wir fr h Angaben ber die Wertbereiche der einzel nen Felder bereitgestellt Aufgrund der PICTURE Angabe ist die Varia ble ZUNAME maximal 30 Zeichen lang w hrend die POSTLEITZAHL eine Zahl mit 4 Ziffern ist Der Wertebereich eines Feldes ist hier mit der PICTURE Klausel durch eine L ngenangabe und einen Verweis auf einen eingebauten Datentyp definiert Mit den Namen dieser Datenstruktur werden Schritt f r Schritt ben tigte Operationen durchdacht und spezifiziert Eine Operation Drucke Adress Aufkleber enth lt dann beispielsweise eine Formulierung Bilde Druckzeile aus TITEL VORNAME und ZUNAME Falls die Zei lenl nge g er als 25 Zeichen ist dann nimm vom Feld TITEL die er sten drei Zeichen Jetzt wird erkannt dass man eine Operation KURZ TITEL die vom Feld TITEL die ersten drei Zeichen selektiert ben tigt Im Kontext passive Datenstruktur bietet sich eine Anderung der TITEL Definition wie folgt an 10 TITEL 15 KURZTITEL PICTURE XXX 15 RESTTITEL PICTURE X 7 Mit
177. Eine Programmiersprache kann die Grenze in Richtung L sungsraum beschreibung zumindest im Umfang einer Pseudocode Notation verschie ben Der Vorteil einer Pseudocode Notation liegt in ihrer Flexibilit t und der Einsatzm glichkeit ber mehrere Projektphasen S mtliche Eigen schaften und Merkmale eines Programms sind jedoch so nicht spezifi zierbar z B k nnen keine Aussagen zur Antwortzeit zum Betriebsmit telbedarf oder zu Realtime Eigenschaften notiert werden Programmier sprachen ersetzen daher nicht spezielle Spezifikationssprachen Die Empfehlungen zum Spezifizieren mit LISP basieren auf einer Be schreibung der Import und Export Schnittstellen Ihre schrittweise Ver feinerung und Pr zisierung wird anhand einer Checkliste vollzogen Abschnitt 3 2 2 S 411 Vorab er rtern wir die Randbedingungen f r das Spezifizieren in LISP Notation Abschnitt 3 2 1 S 407 Im objekt orientierten Paradigma Denkmodell ist die Notation in Unified Modeling Language UML blich und zweckm ig Wir er rtern daher das UML Klassendiagramm Dabei nutzen wir Grafik Optionen um UML Symbole mit Bezug zu unseren Beispielen zu programmieren Abschnitt 3 3 S 418 Mit den Kenntnissen von Grafik Konstrukten er rtern wir ein Tool zum Pr sentieren gt Abschnitt 3 4 S 437 Dabei realisieren wir eine Slideshows zum berzeugen von Programmierern die bisher andere Programmiersprachen nutzten von der N tzlichkeit von LISP l
178. F set car lambda x set car Teil x eq Operation F set cdr lambda x set cdr Teil x t error Unbekannte Operation Operation Die Selektoren car und cdr erfordern eine Liste bzw ein Punkt Paar als Argument Diese Voraussetzung ist mit dem Pr dikat pair pr fbar Fur die Selektoren F car und F cdr definieren wir ein entsprechendes Pr dikat F pair eval gt define F pair lambda Objekt cond 2 5 ABBILDUNGSOPTION FUNKTION MIT UMGEBUNG 2 3 and procedure Objekt Objekt F pair t t error Keine funktionale cons Zelle Objekt In klassischen LISP Implementationen k nnen die Selektoren car und cdr auf die leere Liste angewendet werden obwohl ihre Werte dann prinzipiell nicht definiert sind Der R ckgabewert ist dann oft null In modernen Scheme Implementationen wie z B PLT Scheme DrScheme wird auf Fehler erkannt eval gt null cdr list gt ERROR cdr expects argument of type lt pair gt given Wir definieren ein entsprechendes F nul1 Konstrukt Ist die leere Liste gegeben hat unser F null den Wert F NULL Dieser Wert ist ungleich false und wird daher als wahr interpretiert Liegt nicht F NULL vor dann ist der Wert von F null gleich false F NULL bernimmt nicht die Mehrfachfunktion von NIL Wahrheitswert Repr sentation und bottom element einer Liste wie in klassischen LISP Systemen blich F NULL dient
179. Formulierungen konzentrieren ohne ein unn tiges Wachsen des Speicherbedarfs im Restrekursions Fall in Kauf nehmen zu m ssen Ein Beispiel ist die Funktion Saegezahn lt gt Programm in Tabelle 1 20 S 118 Hinweis Restrekursion Das obige Laenge lt gt Programm in Tabelle 1 19 S 114 ist nicht restre kursiv definiert Mit Hilfe eines Akkumulators ist eine restrekursive L sung leicht definierbar wie das folgende Beispiel zeigt eval gt define rrLaenge lambda liste Zaehlung liste 0 eval gt define Zaehlung lambda 1 Akkumulator cond null 1 Akkumulator t Zaehlung cdr l 1 Akkumulator eval gt rrLaenge A B C D gt 4 Hinweis PLT Scheme Debugger Zum Verst ndnis einer rekursiven Definition ist es hilfreich die Aufruffol gen mit ihren Argumenten und dem zugeh renden R ckgabewert darzu stellen PLT Scheme verf gt ber einen leistungsf higen Debugger der die Aufruffolgen in einzelnen Schritten Steps anzeigt F r das definierte rrLaenge Konstrukt zeigt Abbildung A 3 S 470 einen Zwischenschritt Hinweis PC Scheme TRACE Konstrukt Das TRACE Konstrukt in PC Scheme erm glicht eine Ausgabe der Aufruf folgen Dabei protokolliert TRACE ENTRY jeden Aufruf und TRACE EXIT jedes Verlassen der Funktion TRACE BOTH dokumentiert beides den Auf ruf und das Verlassen der Funktion 14 Ein Debugger engl bug im Sinne von Fehler ist ein Diagnose Tool 1 3 REKURSION ALS PROBLEMLOSUNGSM
180. Gesamt mit Lamb da Variablen z B mit den Parametern P X und P Y eval gt define Gesamt lambda P_X P Y Teil 1 Teil 2 Teil 3 eval gt Gesamt Argument 1 Argument 2 gt lt sexpr gt fur Modul Teil 3 Wir konnen die Abarbeitungsfolge Teil 1 Teil 2 und Teil 3 auch so interpretieren dass ihr Ergebnis den Namen Gesamt hat Der Wert von Gesamt reprasentiert die vollzogene Sequenz eval gt define Gesamt lambda P X P_Y Teil 1 Teil 2 Teil 3 Argument 1 Argument 2 Jetzt wird die anonyme Funktion auf den Wert der beiden Argumente Argument 1 und Argument 2 angewendet wobei m gliche Nebenef fekte z B aufgrund von print Konstrukten sofort zum Tragen k men Der Wert der Sequenz wird durch das define Konstrukt mit dem Sym bol Gesamt assoziiert Auch hier k nnen wir durch quote und eval Konstrukte den Zeitpunkt der Ausf hrung festlegen Abschnitt 1 2 3 S 103 eval gt define Gesamt lambda P X P Y Teil 1 Teil 2 Teil 3 Argument 1 Argument 2 eval gt eval Gesamt gt lt sexpr gt f r Modul Teil 3 Anonyme Funktion Bei der Anwendung einer anonymen Funktion insbesondere wenn diese durch ein umfangreiches 1ambda Konstrukt mit vielen 1ambda Variablen dargestellt wird ist die Zuordnung der Ar gumente zu den lambda Variablen un bersichtlich In LISP gibt es des halb eine syntaktische Verbesserung in Form des 1et Konstruktes eval gt let lt variable gt lt argument
181. Grundseite Pascal Make neue Dreieck Seite Grundseite i Zeile 1 Make neue Dreieck Seite lambda 1 cond I Length 1 list 1 17 t append list 1 append Summe 1 list 1 Summe lambda 1 zahlen cond length 1 zahlen 2 list car 1 zahlen cadr 1 zahlen t append list car 1_zahlen cadr L zahlen Summe cdr 1 zahlen Laenge Ausgabe Zeile 70 Anzahl Ziffern Grundseite lambda 1 Cond null 1 0 auf Zahlen angewendet erst in Symbol konvertieren t length Explode string gt symbol number gt string car 1 Anzahl Ziffern Grundseite edr 1 Anzahl Space Grundseite lambda 1 length 1 1 Einruecken Ausgabe Zeile lambda 1 make string floor Laenge Ausgabe Zeile Anzahl Ziffern Grundseite 1 Anzahl Space Grundseite 2 4 ABBILDUNGSOPTION ZEICHENKETTE UND SYMBOL 269 space Ausgabe lambda 1 display Einruecken Ausgabe Zeile 1 display 1 newline Pascal list 1 0 eval gt Pascalsches Dreieck 12 1 i 1 Ci 2 a 1 3 3 1 1 4 6 4 1 1 5 10 10 1 1 6 15 20 15 6 1 41 7 21 35 35 21 7 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 1 10 45 120 210 252 210 120 45 10 1 1 11 55 165 330 462 462 330 165 55 11 1 1 12 66 220 495 792 924 792 495 220 66 12 1 gt eval gt Vergleich zweier PRINT Namen define x lt y lambda
182. Hauptaufgabe ist somit das Erarbeiten detaillierter Anforderungen lt gt Tabelle 3 8 S 405 Die Anforderungen k nnen sich auf numerische Berechnungen z B L sungen von Differentialgleichungen geometrische Berechnungen z B 3 dimensionale Modelle Datenaggregationen z B Besoldungs bescheide Transaktionsprozesse z B Platzreservierungssysteme Wis sensakquisition z B Diagnosesysteme Kommunikationsprozesse z B Elektronische Post und vieles mehr beziehen Diese Vielfalt der Konstruktionsaufgaben macht unterschiedliche Ar beitstechniken notwendig Arbeitstechniken umfassen einerseits Prinzi pien Handlungsgrunds tze und Methoden erfolgversprechende be gr ndbare Vorgehensweisen und andererseits Instrumente Werkzeu ge Erste sind nicht zweite sind teilweise selbst Software Empfehlungen zur Spezifikation haben zumindest die Aufgabenart und die Aufgabengr e zu ber cksichtigen Es ist z B nicht unerheb lich ob ein administratives System oder ein System zur Steuerung eines technischen Prozesses zu spezifizieren ist Im ersten Fall ist das Nutzen Kostenverh ltnis einzelner Systemlei stungen disponibel bzw unklar Wir haben es mit Definitionsproblemen der Automationsaufgabe zu tun Im zweiten Fall mag die geforderte Reaktionsgeschwindigkeit das ei 3 2 SPEZIFIKATION MIT LISP 405 Anforderungs Kernfrage Beispielformulierungen Programm kategorie Diagnose Abschnitt 3 1 4 S 398 1 funktionale
183. Implementationen auf speziellen Maschinen Workstations oder PCs liegen in der schwie rigen oder sogar ganz fehlenden Graphik Unterst tzung Ihr Vorteil gegen ber diesen dezidierten Maschinen ist die problemlose Integration mit bestehenden Datenbanken und Anwendungspaketen Trotz der leistungsf higen Software Entwicklungsumgebung die LISP im Vergleich zu COBOL auch auf Mainframes bietet Do What I Mean Konzept Programmierassistent Debugger etc gibt es vergleichsweise sehr wenige Implementationen Workstations Personalcomputer F r diese Rechner gibt es LISP Systeme in sehr gro er Zahl Abschnitt A 2 S 462 Ihr Vorteil gegen ber den dezidierten LISP Maschinen liegt einerseits in den geringeren Einstiegskosten und andererseits in der ein fachen Integration in bestehende Automationen Supercomputer F r Supercomputer waren sind Rechner der Firma Cray ein Ma stab Cray bietet das Cray LISP an In Abweichung von den obigen Ausf h rungen soll hier doch eine Leistungsangabe erfolgen weil Supercompu ter heute ausschlie lich aufgrund ihrer Rechengeschwindigkeit in Be tracht kommen Von dem Cray LISP wird berichtet Robort J Douglas 127 dass es 5 15 mal schneller ist als LISP als auf einer Symbolics 3600 Abschnitt A 1 S 460 A 2 Software In der folgenden tabellarischen Aufz hlung ist f r den jeweiligen In terpreter und oder Compiler der Hersteller bzw der Vertreiber genannt und die Rechne
184. K Buchungsdatum A Datum Betrag Betrag cond lt Betrag Konto Kontostand K set Konto Auszahlungen K cons list A Datum Betrag Konto Auszahlungen K set Konto Kontostand K Konto Kontostand K Betrag Konto Kontostand K t error Keine Deckung fuer Betrag t error Keine Einzahlungen hinzugefuegt K A Datum Betrag 314 KAPITEL 2 KONSTRUKTIONEN eval gt Add Auszahlung A001 100119 120 00 gt Keine Deckung fuer 120 0 eval gt Add Auszahlung A001 100119 80 00 gt gt 30 0 eval gt Describe Konto A001 gt Inhalt des Kontos 1 Name Inhaber Leuphana Universit t Adresse Inhaber D 21339 L neburg Einzahlungen 1100118 60 0 100117 50 0 0 Auszahlungen 1100119 80 0 gt 8 Kontostand 30 0 Wir nehmen an dass neben den Konten der bisherigen Kontenstruk tur andere Konten mit den beiden zus tzlichen Eigenschaften Buchungs grund und Bearbeiter ben tigt werden Ein solches erweitertes Kon to sei z B ein Verwahrkonto d h ein Konto auf dem dubiose Vorg nge zwischengebucht werden Zur Definition der Struktur Verwahrkonto sind nicht alle Felder slots neu zu beschreiben Die Struktur Verwahr konto kann auf der definierten Struktur Konto aufbauen Oder aus der entgegengesetzten Blickrichtung formuliert Die Struktur Verwahr konto erbt die Felder der Struktur Konto 2 6 3 Einfache statische Vererbung Vererbung ist die bertragung von k rperlichen un
185. Kennzeichnung der Reichweite eines Kommentars nachstehende Konstrukt Ein Dreifach Semikolon Kommentar beginnt stets in der ersten Spalte einer Zeile Er beschreibt ein gr eres Konstrukt Ein Vierfach Semikolon Kommentar kennzeichnet berschriften Er beginnt ebenfalls in der er sten Spalte Die Beispiele in diesem Buch sind weitgehend gem dieser Konven tion Tabelle 3 4 S 392 kommentiert Kommentarzeilen sind gleichzeitig mit den LISP Zeilen zu schreiben die sie erl utern Es ist sicherzustellen dass Kommentare mitgepflegt werden Ein nicht mehr g ltiger Kommentar ist irref hrend und daher sch dlicher als ein fehlender Kommentar Bei jeder Modifikation emp fiehlt es sich vorsichtshalber Kommentare in Bezug auf die nderungs stelle vorab zu l schen Exkurs Documentation String In Common LISP kann beim Definieren einer Funktion mit dem DEFUN Konstrukt oder eines Makros mit dem DEFMACRO Konstrukt im Dekla rationsbereich ein Kommentar hinterlegt werden DEFUN lt funktionsname gt lt lambda schnittstelle gt lt deklaration gt lt funktionskoerper gt Ist eine lt deklaration gt vom Typ String dann dient sie zur Kommen tierung des Konstruktes Der Kommentar ist abrufbar mit der Applikation von DOCUMENTATION Z B eval gt DOCUMENTATION FOO FUNCTION 392 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Semikolonanzahl Beginn in Verwendung der Spalte ara space berschrift f
186. Konstrukte Konstruktionen Konstruktionsempfehlungen Programmieren in LISP Schemef Hinrich E G Bonin Prof Dr rer publ Dipl Ing Dipl Wirtsch Ing Hinrich E G Bonin lehrte bis Ende M rz 2010 Informatik in der ffentlichen Verwaltung an der Leupha na Universit t L neburg Institut f r Wirtschaftsinformatik IWI Email Hin rich hegb de Adresse An der Eulenburg 6 D 21391 Reppenstedt Germany Zusammenfassung en eR ry Fp oy tad ER ER Lt Gate RER 3 1 amp 7 AR EIER re Yo Dr h ER a Fr a Bar Gr 2E d wae he Ge eae A 7 ray A ur aoe A pss Buch zeigt programmieren als einen systemati schen disziplinierten Konstruktionsvorgang Dazu wird LISP Akronym f r LIst Processing aus klassischen und neuen Blickwinkeln erl utert LISP ist eine bew hrte Spra che geschaffen f r die Bew ltigung komplexer Aufgaben und pr destiniert f r den Umgang mit Symbolen abgelei tet aus dem A Kalk l und gepr gt durch ihre Dualitat von Daten und Programm LISP erm glicht mit seinem moder nen Dialekt Scheme ohne Ballast ein imperativ funktions und objekt gepr gtes programmieren Dieses Buch zeigt zweckm ige Bausteine Kapitel I skizziert bew hrte Konstruktionen Kapitel II und gibt pra xisnahe Konstruktionsempfehlungen Kapitell III Es basiert auf meiner langj hrigen Lehrt tigkeit an verschiedenen Hochschulen und ist daher dominant gepr gt
187. Kopf Text Fuss 1 and Kopf Kopf 2 1 VERSTEHEN EINER KONSTRUKTION 159 Text Text Fuss Fuss cons Kopf cons Text cons Fuss cdddr Bilde Leeres Formular error Kein Formular gebildet eval gt Pradikat define Formular lambda x or Leeres Formular x and pair x eq list ref x 3 FORM eval gt Selektoren Name beginnt blicherweise mit Get define Get Kopf lambda x cond Formular x list ref x 0 t error Kein Formular x eval gt define Get Text lambda x cond Formular x list ref x 1 t error Kein Formular x eval define Get Fuss lambda x cond Formular x list ref x 2 t error Kein Formular x Mutatoren Hinweis Das set car Konstrukt wird sp ter erl utert Es ist hier erforderlich um ein existierendes Formular das durch eine Liste abgebildet ist modifizieren zu k nnen eval gt define Set Kopf lambda Kopf Form if and Kopf Kopf Formular Form begin set car Form Kopf Form error Fehler eval gt define Set Text lambda Text Form if and Text Text Formular Form begin 160 KAPITEL 2 KONSTRUKTIONEN set car cdr Form Text Form error Fehler eval gt define Set Fuss lambda Fuss Form if and Fuss Fuss Formular Form begin set car cddr Form Fuss Form error Fehler Be
188. L 1 Akkumulator member car L 1 Akkumulator Vereinigung cdr L 1 L 2 Akkumulator t Vereinigung cdr L 1 L2 cons car L 1 Akkumulator Vereinigung Liste 1 Liste_2 null union menge A B CDE gt E DCB A union menge A A B B C B DD E gt E D C B A eval gt eval gt Beispiel Exponential Funktion f r ganzahlige Exponenten gr er Null 1 falls n O x2 falls n gradzahlig even xxx falls n ungradzahlig eval gt define lambda Basis Integer Zahl letrec Pr fen auf gerade Zahl even lambda n 0 remainder n 2 Quadratfunktion square lambda y y y Exponential Funktion expt lambda x n cond 0 n 1 even n square expt x n 2 t x expt x 1 3 REKURSION ALS PROBLEMLOSUNGSMETHODE 139 m IIIT expt Basis Integer Zahl eval 3 2 gt 9 Beispiel Vergleich zweier Listen Vergleich zweier Listen wobei das Element mit dem numerischen Maximalwert der ersten Liste ermittelt wird R ckgabewert ist das Element der zweiten Liste das an der glei chen Position steht eval gt Iterative L sung define Maximum Parallel Wert lambda Zahlen Liste Such Liste do ZL Zahlen Liste cdr ZL SL Such Liste cdr SL ZL Max 0 SL Max null null ZL SL Max cond lt ZL Max car ZL set ZL Max car ZL set SL Max car SL t eval gt Rekurs
189. Merkmale Lucid Common LISP ist eine Entwicklungsumgebung ftir den pro fessionellen Produktionseinsatz Neben dem vollen Common LISP Sprachum fang sind EMACS Stil Editor Window System und ein Flavor System vorhan den e muLISP http de wikipedia org wiki MuLISP Zugriff 22 Jan 2010 Rechnerklasse PC Hersteller Soft Warehouse Inc POB 11174 Honolulu Hawaii 96828 Microsoft Inc 10700 Northrup Way Bellevue WA 98004 USA Merkmale muLISP deckt ca 400 der ca 800 Common LISP Konstrukte ab MuLISP hat den Ruf besonders schnell zu sein und wenig Speicherplatz zu ben tigen Aufgrund der Pseudocode Compilation ist der Speicherbedarf re lativ gering e Nil s LISP Rechnerklasse PC Hersteller A Fittschen Weusthoffstra e 6 D 2100 Hamburg 90 Merkmale Nil s LISP basiert primar auf TLC LISP und enth lt Komponen ten von UCI LISP Ein Flavor System ist verf gbar Nil s LISP wurde an der Universitat Hamburg eingesetzt e PSL http en wikipedia org wiki Portable Standard_Lisp Zugriff 22 Jan 2010 466 ANHANG A LISP SYSTEME Rechnerklasse Workstation Hersteller University of Utah Computer Science Department Salt Lake City UT 84112 USA Merkmale Versuch eines LISP Standards vor dem Common LISP Standard Starker Einfluss von FranzLISP und MacLISP e PC Scheme http www cs indiana edu scheme repository imp html Zugriff 22 Jan 2010 Rechnerklasse
190. N 27 A Namenlos DrScheme oj xi Datei Bearbeiten Anzeigen Sprache Scheme Einf gen Hilfe Namenlos define v Macro Stepper Y Debugger 2 Syntaxpr fung a Start Pod Stop lang scheme i z B El Willkommen bei DrScheme Version 4 2 3 3m Sprache Module memory limit 512 megabytes gt if false Ja Nein Nein gt if t Ja Nein Ja gt define Antwort t gt if Antwort Dank f r die Zustimmung Denken Sie mit Dank f r die Zustimmung gt define Muller OHG 0 14 100 gt define Meyer AG D 76131 Karlsruhe gt Module 14 2 g Legende Dr Scheme http www plt scheme org Zugriff 24 Oct 2009 Abbildung 1 9 Beispiele zur EVAL Regel 3 gebunden ist Gibt es keine entsprechende Bindung dann f hrt das Eva luieren des Symbols zu keinem Wert sondern abh ngig vom jeweiligen LISP System zu einer Fehlermeldung Beispiele zur EVAL Regel 4 lt gt Abbildung 1 10 S 28 eval gt define Schmidt GmbH 14 89 eval gt Schmidt GmbH gt 14 89 eval gt define Meyer AG Schmidt GmbH eval gt Meyer AG gt 14 89 eval gt Otto AG gt ERROR reference to an identifier before its definition Otto AG 1 1 3 Repr sentation von Daten und Programm Im Mittelpunkt der Softwarekonstruktion steht der Begriff Algorithmus Darunter versteht man ein eindeutig bestimmtes Verfahren Prozess 7Hinweis Bei einigen LISP System z B bei
191. N OMEN ATQUE OMEN I Die Benennung ist zus tzlich abh ngig vom jeweiligen Denkrahmen Paradigma des Konstrukteurs Abschnitt 2 1 S 141 Daher wird beispielsweise empfohlen Funktionsnamen so zu w hlen dass sie im plizit Annahmen ber ihre Arbeit in Form von gt Vertr gen lt ber Ein gabe Ausgabe Relationen aufdr ngen 178 S 56 Im objekt gepr gten Denkrahmen sind Operationen mit Verben und Operanden mit Substantiven zu benennen Im imperativ gepr gten Denkrahmen ha ben alle Bezeichnungen Befehlscharakter an den ausf hrenden Rechner Kasernenhof Formulierungen Orientiert am jeweiligen Denkrahmen w ren f r ein Konstrukt das z B den Firmenkurznamen eines Kunden selektiert folgende Benennungen zu w hlen e Imperativ gepr gte Konstruktion Gib Firmen Kurzname e Funktions gepr gte Konstruktion Kunde gt Firmen Kurzname 3 1 TRANSPARENZ DER DOKUMENTATION 379 e Objekt gepr gte Konstruktion Selektieren Firmen Kurzname Als konstruktionsbedingte Informationen wollen wir mit der Benennung z B vermitteln 1 den Daten Typ Ist es eine Funktion eine Variable ein Makro etc Z B F Bilanzabgleich Funktion V Bilanzabgleich Variable M Bilanzabgleich Makro 2 den aufgabensspezifischen Typ Ist es ein Konstruktor Pr dikat Selektor oder Mutator Tabelle 3 2 S 380 3 die Flussrichtung In welche Richtung flie en die Daten Z B Input Kundendatei oder Output Kundend
192. NSTRUKTE Vorgang an Abteilung 2 abgeben eval gt ET Auszahlung buchen gt Ist die Kontonummer angegeben J N N Ist der Betrag groesser gleich 50 00 EUR J N N Ist der Zweck angegeben J N N Dem Chef vorlegen Die L sung im Programm der Tabelle 1 15 S 83 wirft die Frage auf Kann eine tiefe Schachtelung von cond Konstrukten durch Nutzung der logischen Verkn pfungen and und or vermieden werden Zun chst er l utern wir diese logischen Verkn pfungen indem wir sie f r zwei Ar gumente engl binary predicates mit dem cond Konstrukt abbilden eval gt define myAnd lambda arg 1 arg 2 cond arg 1 arg 2 1 Klausel t 2 Klausel eval gt myAnd Ok Klar Klar eval gt myAnd f Klar gt Hf Ist arg 1 wahr dann wird die 1 Klausel des cond Konstruktes aus gef hrt Es wird der Wert von arg_2 festgestellt und als Wert von myAnd zur ckgegeben Da arg_1 wahr ist entscheidet arg_2 ob die and Ver kn pfung insgesamt wahr ist Ist arg_1 jedoch gleich false also nicht wahr dann kann sofort ohne den Wert von arg_2 nachzufragen das gesamte and Konstrukt den Wert erhalten Analog dazu ist das or Konstrukt f r zwei Argumente formulierbar eval gt define myOr lambda arg 1 arg 2 cond arg 1 t t arg_2 eval gt myOr Ok Klar HE eval gt myOr f Klar gt Klar Wir k nnen die Definition von myOr noch k rzer formulieren eval gt
193. ON 399 gt cpu time 578 real time 1328 gc time 0 lt eof gt 2 9 2 Thread System Ein Thread deutsch Faden Gedankengang definiert einen Ausf h rungsstrang d h die Reihenfolge der Ausf hrung bei der Abarbeitung eines Programms Threads lassen sich unterscheiden in e User Threads Sie lassen Programm teil e miteinander verzahnt ablaufen Ihre Funktionalit t ist in einer User Programmbibliothek abgebildet und nicht direkt im Betriebssystemkern implementiert e Kernel Threads Threads die als Teil des Betriebssystems ablau fen Ihre Funktionalit t ist im Betriebssystemkern implementiert Da ein User Thread dem Betriebssystem quasi unbekannt ist muss der Programmierer mit Hilfe der bereitgestellten Konstrukte die Steue rung Scheduling selbst definieren W hrend jedem Prozess die Be triebsmittel und der Speicherraum zugeordnet sind teilen sich User Threads innerhalb eines Prozesses die betriebssystemabh ngigen Ressour cen z B Dateien und den Speicher Der Koordinationsaufwand f r Threads ist daher blicherweise kleiner als f r Prozesse Beim Thread Wechsel ist kein umfassender Kontextwechsel wie bei einem Prozess wechsel notwendig weil die Threads einen gemeinsamen Teil des Pro zesskontextes verwenden Schritt f r Schritt wird das thread Konstrukt in Scheme erkl rt Da zu wird mit dem simplen Beispiel der Ausgabe der Buchstaben des Al phabetes begonnen Idee f r dieses didakti
194. P ist konzipiert f r den Umgang mit Symbolen Wie der Name LISt Processing besagt ist LISP gepr gt e durch die Liste als das Mittel zur Darstellung von Strukturen und e durch den Prozess der Auswertung von Listen symbolischen Aus dr cken Beide Kennzeichen werden erst im Sinne einer Kostprobe vermittelt und in den folgenden Abschnitten unter verschiedenen Aspekten weiter vertieft Zun chst ist es erforderlich die Syntax elementarer Konstrukte engl primitives zu erl utern Danach gilt es die Semantik dieser Kon strukte zu beschreiben Dabei geht es um die Bedeutung der elementa ren Konstrukte d h um die Werte die solche Konstrukte aus korrekten Eingaben berechnen Zur weiteren Standardisierung von Scheme Bibliotheken gibt es seit dem Scheme Workshop in Baltimore Maryland 26 Sep 1998 im Web das Forum Scheme Requests for Implementation SRFI p http srfi schemers org Zugriff 23 Jan 2010 1 1 EINFUHRUNG HANDHABUNG VON KONSTRUKTEN 15 Die folgenden LISP Beispiele sind in PLT Scheme notiert und getestet PLT Scheme is an innovative programming language that builds on a rich aca demic and practical tradition It is suitable for implementation tasks ranging from scripting to application development including GUIs web services etc It includes the DrScheme programming environment a virtual machine with a just in time compiler tools for creating stand alone executables the PLT Scheme web serv
195. PC Scheme http www cs indiana edu scheme repository imp html Zugriff 25 Oct 2009 erfolgt dann ein bergang in einen Fehlerkorrekturmodus engl inspect debug level 28 KAPITEL 1 KONSTRUKTE A Namenlos DrScheme gt Datei Bearbeit cy j S h Sch Einf Hilf Ze nz Namenlos define Debugger sSyntaxpr fung A Start Z stop a Willkommen bei DrScheme Version 4 2 2 3m Sprache Fortgeschritten memory limit 128 megabytes gt define Schmidt GmbH 14 89 gt Schmidt GmbH 14 89 gt define Meyer AG Schmidt GmbH gt Meyer AG 14 89 gt Otto AG reference to an jtdentifrer before ts definition 2 Otto AG gt i Fortgeschritten 11 2 g Legende Dr Scheme http www plt scheme org Zugriff 24 Oct 2009 Abbildung 1 10 Beispiele zur EVAL Regel 4 oder die Beschreibung eines solchen Verfahrens Diese intuitive Defi nition verdeutlicht dass es bei einem Algorithmus nicht nur um ein Verfahren geht sondern auch um seine Beschreibung Sie kann in ei ner nat rlichen oder formalen Sprache z B in LISP oder mit Hilfe eines grafischen Darstellungsmittels z B Struktogramm erfolgen Be deutsam ist die Eindeutigkeit der Beschreibung mit Hilfe eines endlichen Textes Bestimmt wird ein Algorithmus durch die Vorgabe 1 einer Menge von Eingabe Zwischen und Endgrofsen 2 einer Menge von Elementaroperationen und 3 der Vorschrift in welcher Reihenfolge welche Operationen
196. PLAN auf dem Bildschirm ausgegeben ARBEITSPLAN stellt jetzt je doch eine zirkul re Liste infinite Sequenz dar weil der letzte cdr Part Zeiger wieder auf die Anfangs cons Zelle zeigt Zur Vermeidung einer endlosen Ausgabe gibt es folgende Darstellung eval gt ARBEITSPLAN 0 ber die Investition Lagerhalle West entscheiden Zeugnis f r den Abteilungsleiter Meier diktieren Budgetplanung f r die Zentralabteilung aufstellen HOH Dass ARBEITSPLAN an eine zirkul re Liste gebunden ist zeigt die Anwendung des eq Konstruktes eval gt eq ARBEITSPLAN cdddr ARBEITSPLAN gt Ft Das eq Konstrukt stellt fest ob die ihm bergebenen Zeiger auf die selbe cons Zelle zeigen d h denselben Wert haben Die Identit tsent scheidung des eq Konstruktes Abschnitt 1 2 1 S 59 ist das Pr fen von Zeigern 168 KAPITEL 2 KONSTRUKTIONEN Um die Elemente einer zirkularen Liste auszugeben definierten wir ein eigenes Print Element Konstrukt Mit Hilfe des read Konstruktes konnen wir Daten vom Benutzer abfragen so dass zwischen weitere Aus gabe und Ende untschieden werden kann Die Ausgabe selbst veranlasst das display Konstrukt Eine neue Zeile bei der Ausgabe erreichen wir mit dem newline Konstrukt eval gt define Print Element lambda Zirkulaere Liste display car Zirkulaere Liste newline let Anforderung begin newline display N chstes Element J N read cond eq Anf
197. R lambda X R G G F X G G F eval gt define Y 2 lambda F H let G lambda G R lambda N R G G F G G HJ N G G F Ein einfaches Beispiel f r die Y 2 Nutzung ist die Pr fung ob eine vorgegebene Zahl gerade oder ungerade ist 68 eval gt Y 2 lambda F H lambda N if lt N 1 2 5 ABBILDUNGSOPTION FUNKTION MIT UMGEBUNG 285 Gerade H N 1 lambda F H lambda N if lt N 1 Ungerade F N 1 13 gt Ungerade Auff llig ist die gro e hnlichkeit zum entsprechenden let rec Kon strukt eval gt letrec F lambda N if lt N 1 Gerade H N 1 H lambda N IE lt N TJ Ungerade F N 1 F 13 gt Ungerade 2 5 2 Kontrollstruktur Continuation Kennzeichnend fur funktionsgepragte Konstruktionen ist die Kompositi on von Funktionen evaluierte 1 ambda Konstrukte Die EVAL Regeln legen ihre Abarbeitungs Reihenfolge Kontrollstruktur Abschnitt 1 2 2 S 65 fest d h sie bestimmen welche Funktion wann auszuwer ten ist Kern der Kontrollstruktur ist die Sequenz 1 Bestimmung der Werte der Argumente und 2 Ermittlung des Funktionswertes mit den bernommenen Werten der Argumente lt gt EVAL Regel 2 S 22 Beispielsweise hat die Komposition F G H Foo die folgende Kontrollstruktur mit S Schritt S Wert von F ermitteln Da dieser Wert eine Funktion ist ist zun c
198. Regel oder Muster Orientierung 448 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Exkurs Begriff Modell Der Begriff Modell ist mit divergierenden Inhalten belegt In der mathe matischen Logik ist Modell das Besondere im Verh ltnis zu einem Allge meinen Das Modell eines Axiomensystems ist eine konkrete Inkarnation Interpretation dieses Systems In der Informatik wird der Begriff in der Regel im umgekehrten Sinne verwendet Das Modell ist das Allgemei ne gegen ber einem Besonderen Entscheidend f r klassische objekt orientierte Ans tze ist die Frage zu welchem Zeitpunkt die Auswertung hier der Typen der Argumente vollzogen wird Prin zipiell kann es zur Zeit der Compilierung statisches Konzept oder zur Laufzeit dynamisches Konzept erfolgen Java unterst tzt den Compilierungszeit Poly morphismus Smalltalk 73 ist beispielsweise ein Vertreter des Laufzeit Polymorphismus Nun wird leider beinahe in jedem Paradigma der Begriff Objekt verwen det beispielsweise bei Data driven Programming Pattern driven Programming oder auch bei Programming in Logic Wir konzentrieren uns hier auf eine Ob jekt Orientierung im Sinne des Klasse Instanz Modells Abschnitt 2 8 S 327 Dessen Vor sowie Nachteile verdeutlichen wir an dem simplen Beispiel einen Schreibtisch mit 4 Schubladen abzubilden gt Abschnitt 3 5 1 S 449 Exkurs Data driven Programming Die Daten gesteuerte Programmierung 2 z B
199. S 118 Die Rekursivit t ist eine Eigenschaft der L sung eines Problems Sie ist nicht eine Eigenschaft des Problems selbst Wir vertiefen die rekursi ve Probleml sungs Methode anhand von Beispielen Als erstes Beispiel ist eine Funktion definiert die in einem beliebigen Text ermittelt wie oft ein vorgegebenes Wort vorkommt Dabei er rtern wir die Technik der re kursiven Funktionsanwendung auf die Restliste eines Listen Argumentes Abschnitt 1 3 1 S 119 Das zweite Beispiel ist eine Funktion die in 15Hinweis Es handelt sich um eine mathematische Notation und nicht um eine LISP Notation Um den Unterschied zu verdeutlichen wurden in der mathematischen Notation eckige statt runden Klammern verwendet 118 KAPITEL 1 KONSTRUKTE Saegezahn X Legende Grafische Darstellung der restrekursiv definierten Funktion Saegezahn mathemathische Notation S 117 Abbildung 1 22 Beispiel Saegezahn Funktion eval gt define Saegezahn lambda x cond lt x 0 0 lt x 1 xX lt xX 2 2 K t Saegezahn x 2 eval gt Saegezahn 4 5 gt 0 5 Legende Abbildung 1 22 S 118 Tabelle 1 20 Programm Restrekursiv definierte Funktion Saegezahn 1 3 REKURSION ALS PROBLEMLOSUNGSMETHODE 119 einem Text ein vorgegebenes Wort durch ein neues ersetzt wobei der Text als Liste mit Sublisten abgebildet ist Es geht dabei um das Absu chen einer Baumstruktur Abschnitt 1 3 2 S 122 Im dritte
200. Set Match Value Get Match Variable car Muster cons car Liste Get Match Value Get Match Variable car Muster t Match cdr Muster Liste t t He Match Analyse Literal Atom Pattern Object Applikation eval gt Mustervergleich X hat wartbare Y Der Entwurf hat eine wartbare Struktur gt t eval gt getprop X Match Value gt Der Entwurf eval gt getprop Y Match Value gt Struktur 2 4 ABBILDUNGSOPTION ZEICHENKETTE UND SYMBOL 209 2 4 4 Generieren eines Symbols Wird der Name eines Symbol eingelesen dann ist zu pr fen ob dieses Symbol schon existiert oder nicht Da wir laufend mit Symbolen um gehen ist so effizient wie m glich zu pr fen ob es sich um ein vor handenes oder neues zu erzeugendes Symbol handelt Z B ben tigt das define Konstrukt das Pr fergebnis um zu entscheiden ob nur der Wert eines existierenden Symbols zu ndern oder zun chst ein entspre chendes Symbol zu erzeugen und dann in der Umgebung mit seinem Wert einzutragen ist eval gt Foo gt ERROR In der Umgebung nicht definiert reference to an identifier before its definition Foo eval gt define Foo 6 Foo generiert und Wert zugewiesen eval gt define Foo A B C Foo neuen Wert zugewiesen eval gt Foo gt A B C Diese Pr fung nimmt blicherweise Bezug auf eine Symboltabelle Dabei werden neue Symbole erzeugt und
201. Sprechen wir von Gleichheit im Sinne von Nichtunterscheidbarkeit dann haben alle Tests f r beide Objekte stets identische Resultate Eine Identit tsfeststellung bei zwei Argumenten bedingt das Pr fen zweier Namen die dasselbe Objekt benennen Das Vergleichspr dikat im Sinne einer solchen Identit tsfeststellung hei t eq abgek rzt von equal phonetisch i kju oder hnlich z B eq in Scheme Bei Symbolen nimmt das eq Konstrukt Identit t an wenn beide Argumente sich auf dasselbe interne Objekt im LISP System be ziehen Pr fung der Gleichheit von Adressen Abschnitt 2 2 S 160 Bei Zahlatomen ist man an ihrer numerischen Wertgleichheit inter essiert und nicht daran ob das LISP System die beiden Argumente Zah len als dasselbe Objekt interpretiert oder nicht Gel st wird dieses Pro blem entweder durch ein eigenst ndiges Vergleichskonstrukt f r Zahla tome z B das Symbol bei Scheme oder durch entsprechende Erwei terung von eg lt gt z B TLC LISP In modernen LISP Systemen ist dieses Vergleichen h ufig als eine sogenannte generische Funktion realisiert Eine solche Funktion stellt selbst fest von welchem Typ die bergebenen Werte sind und aktiviert dann das zugeordnete Vergleichskonstrukt Sind die symbolischen Ausdr cke im Sinne der Ersetzbarkeit Gleiches durch Gleiches zu pr fen dann ist das equal Konstrukt anzuwenden Hat schon das eq Konstrukt f r zwei Argumente den Wert true dann
202. The Beauty of Fractals Berlin Heidelberg New York Springer Verlag 1986 Rozsa P ter Rekursive Funktionen in der Komputer Theorie Budapest Akadmiai Kiad 1976 R Piloty RTS Registertransfersprache Institut f r Nachrichtenverarbeitung Technische Hochschule Darmstadt 2 Auflage 8 Jul 1968 Robert M Pirsig Zen and the Art of Motorcycle Maintenance An Inquiry Into Values Taschenbuchausgabe Corgi Books Deutsche Ausgabe Zen und die Kunst ein Motorrad zu warten Ein Versuch ber Werte bersetzt von Rudolf Herm stein Frankfurt Main S Fischer 1976 Kent M Pitman Special Forms in LISP LISP Conference Stanford Redwood Est 1980 pp 179 187 Andrew R Pleszkun Matthew J Thazhuthaveetil The Architecture of Lisp Ma chines Computer Vol 20 No 3 March 1987 pp 35 44 Vaughan R Pratt A Mathematician s View of LISE BYTE August 1979 pp 162 168 Mary Ann Quayle William Weil Jeffrey Bonar Alan Lesgolg The Friendly Dandelion Primer Tutoring Systems Group University of Pittsburgh 1984 Christian Queinnec LISP bersetzt ins Englisch von Tracy A Lewis London Mac millan Publishers Ltd 1984 franzosische Orginal 1983 Eyrolles Paris Christian Queinnec Jerome Chailloux Eds LISP Evolution and Standardiza tion Proceedings of the First International Workshop 22 23 February 1988 Paris France Amsterdam AFCET ISO 1988 Rational Software Unified Modeling Language V
203. Vermeintlich lokale P Liste lambda let Meine P Liste Baz putprop Meine P Liste Key 1 value 1 putprop Meine P Liste Key 2 value 2 196 KAPITEL 2 KONSTRUKTIONEN putprop Meine P Liste Key 3 value 3 putprop Meine P Liste Key 1 value neu Meine P Liste eval gt define Foo Vermeintlich lokale P Liste eval gt Foo gt Baz eval gt getprop Foo Key 1 gt value neu eval gt getprop Foo Key 4 gt f eval gt putprop Baz Key 4 value 4 eval gt getprop Foo Key 4 gt value 4 Achtung Nebeneffekt Key 4 existiert jetzt Die P Liste ist f r das Symbol Baz angelegt Mit dem Definieren des Foo Konstruktes zeigt das Symbol Foo auf die P Liste von Baz Wird die P Liste von Baz ver ndert dann ist Foo davon mitbetroffen Diese Globalit t der P Liste f hrt leicht zu ungewollten Nebeneffekten Fehler quelle Man kann ihre Globalit t jedoch vorteilhaft zur Kommunikation zwischen Konstrukten nutzen Eine Kommunikation ber die P Liste zeigt das folgende Beispiel Schnittmenge Symbol Wir berechnen die Schnittmenge von Sym bolen in zwei Listen Zun chst werden alle Symbole die in der ersten Liste vorkommen markiert Sie erhalten eine Eintragung in ihrer P Liste Damit eine bereits vorhandene Eigenschaft nicht berschrieben wird ist sicherzustellen dass wir eine Eigenschaft w hlen die nicht noch ein mal vorkommt Dazu nutzen wir das gensym Konstrukt N heres daz
204. Wenn ein Objekt gel scht wird dann wird das assoziierte gegen berliegende Objekt ebenfalls gel scht Chart Association3 Konstrukt eval gt define Chart Associationg let MyFont make object font 40 modern normal bold hc append pin over rectangle 240 100 50 20 text Foo MyFont 50 0 0 vc append text lt lt stereotyp gt gt null 24 0 0 hc append text beziehungsName null 24 0 0 arrowhead 16 0 0 hc append 80 text m null 24 0 0 text zusicherung merkmal null 24 0 0 text m null 24 0 0 hline 500 1 hc append 400 text rolle null 24 0 0 text rolle null 24 0 0 pin over rectangle 240 100 50 20 text Bar MyFont 50 0 0 eval gt Chart Association gt Abbildung 3 5 S 428 430 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Assoziation Sonderfall Aggregation Eine Aggregation beschreibt eine GanzesTeile Assoziation Das Gan ze nimmt dabei Aufgaben stellvertretend fur seine Teile wahr Im Un terschied zur normalen Assoziation haben die beteiligten Klassen keine gleichberechtigten Beziehungen Die Aggregationsklasse hat eine her vorgehobene Rolle und bernimmt die Koordination ihrer Teileklassen Zur Unterscheidung zwischen Aggregationsklasse und Teileklasse n wird die Beziehungslinie durch eine Raute auf der Seite der Ag gregationsklasse erg nzt Die Raute symbolisiert das Beh lterobjekt das die Teile aufnimmt V
205. ache mit der Ausgabe der Meldung Hello world auf dem Bild schirm Dieser bew hrten Informatik Gepflogenheit folgen wir obwohl Sie die L sung m glicherweise nur im Ansatz verstehen So zeigt Ab bildung 1 2 S 12 vorab dazu LISP typisch die Applikation einer anony men Funktion Weil weltweit alle LISP Programmierer zun chst einmal Hello World notieren ist die hier gezeigte Kostprobe von allen an deren zu unterscheiden Wir betten sie deshalb in einem eigenen Modul ein Im ersten Kapitel erl utern wir Konstrukte der Programmiersprache LISP und ihre Handhabung mit dem Ziel ein zweckm iges trans parentes und effizientes Programm zu konstruieren Abschnitt 1 1 S 14 Programmieren wird als L sen einer Konstruktionsaufgabe aufge fasst Abschnitt 1 2 S 50 wobei der Programmtext Quellcodetext die Konstruktion einerseits f r den Programmierer Transparenzaspekt und andererseits f r den Rechner Effizienzsaspekt dokumentiert Bestimmte Konstruktionen sind f r eine Programmiersprache cha rakteristisch F r LISP sind es die Konstruktionen der rekursiven Pro bleml sungsmethode Nicht jede weitverbreitete Programmiersprache ver f gt ber Konstrukte f r rekursive L sungen z B besitzt COBOL Com mon Business Oriented Language selbst im derzeit g ltigen Standard ber kein Konstrukt zur Formulierung rekursiver Definitionen es m ssen l American National Standard COBOL X3 23 1985 14 KAPIT
206. achricht dann interpretiert es die Nachricht d h es ermittelt die zu applizierenden Teil Operationen und f hrt diese aus Eine Nachricht kann mehrere Teil Operationen betreffen Wir sprechen in diesem Kontext eher von Methoden engl methods statt von Operationen oder Funktionen Eine Methode ist eine Funktion die als Reaktion auf eine zugeh rende Nachricht ausgef hrt wird Sie ist einer Klasse zugeordnet Die Vererbung bezieht sich daher sowohl auf die lokalen Zustandsbeschreibungen Slots wie auf die ge nerierten Selektions Mutations Funktionen und die selbst definierten Funktionen Methoden F r unsere Kontenverwaltung definieren wir als Ausgangsbasis zu n chst die Klasse Konto Entsprechend der define struct L sung Abschnitt 2 6 2 S 309 beschreibt die Klasse Konto die Slots Fel der Idenifizierung Name Inhaber Adresse Inhaber Ein zahlungen Auszahlungen und Kontostand Hinweis Name einer Klasse In blicher LISP ischer Terminologie endet ein Klassenname mit einem Prozentzeichen so dass unser Konto jetzt Konto genannt wird Konto Konstrukt eval gt define Konto class object Argument zur Initialisierung init id name Slots public 18PIT Scheme gt http www plt scheme org Zugriff 24 Oct 2009 330 KAPITEL 2 KONSTRUKTIONEN field Identifizierung id field Name Inhaber name field Adresse Inhaber private define Einzahlungen null define Auszahlungen nu
207. acter eval gt Mein Programm gt Mein Programm Zeichenkette engl string eval gt t gt true Repr sentation Hinweis Bei einigen LISP System z B bei PC Scheme http www cs indiana edu scheme repository imp html Zugriff 25 Oct 2009 werden im Falle einer Entscheidung neben true alle Werte ungleich NIL bzw nil als wahr aufgefasst 22 KAPITEL 1 KONSTRUKTE Datei Bearbeiten Anzeigen Sprache Scheme Einf gen Hilfe Namenlos define Y Macro Stepper Y Debugger Syntaxpr fung a Start R Stop lang scheme Willkommen bei DrScheme Version 4 2 3 3m z Sprache Module memory limit 512 megabytes gt 0 0 gt 12 34567 12 34567 gt a a gt Mein Programm Mein Programm gt t Module 17 2 Legende Dr Scheme gt http www plt scheme org Zugriff 24 Oct 2009 Abbildung 1 5 Beispiele zur EVAL Regel 1 des Wahrheits wertes wahr eval gt false gt false Reprasentation des Wahrheitswertes nicht wahr e EVAL Regel 2 Evaluieren einer Liste des Typs lt funktion gt lt arg gt lt argn gt Ist der symbolische Ausdruck eine Liste des Typs lt funktion gt lt arg gt lt arg gt dann ergibt sich der Wert durch Evaluieren der Argumente lt arg gt lt argn gt und anschliefSender An wendung der Funktion auf diese Werte Hier sei eine Funktion durch ein Symbol benannt Z B b
208. age im Text ohne alpha numeri sche Kennziffer 396 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Identifier lt buchstabe gt lt nummern gt lt buchstabe gt Art der Aussage Anforderung Entwurf Implementation Test lt nummern gt Gegliedert mittels Punkt 2 big ll 5 8 5S Tabelle 3 6 Vorschlag Identifier in der Dokumentation In welcher Form die Kennziffern als Basis dieser Vor und R ckw rts verkettung zu bilden sind ist in den jeweiligen Dokumentationsrichtli nien festzuschreiben In diesem Buch benutzen wir Zahlen mit einem vorangestellten Buchstaben lt gt Tabelle 3 6 S 396 Au erdem haben die Dokumentationsrichtlinien vorzuschreiben welche Kenndaten ein selbstst ndiges Dokument aufzuweisen hat Kopfdaten und Fu daten Vorschrift Zumindest erforderlich sind die Angaben 1 Dokumentnummer 2 Kurzbezeichnung 3 kurze Zweckangabe Zusammenfassung und 4 Erstellungs und Modifikationsdaten Die folgende Gegen berstellung einer Beschreibung weniger Anfor derungen zeigt M glichkeiten einer Identifizierung entsprechend Tabelle 3 6 S 396 Beispiel Plausibilit tspr fung Fall 1 Verbaler Text So nicht Das Programm soll drei Datenelemen te auf Plausibilit t berpr fen Ist das erste Datenelement falsch wird ei ne Fehlernachricht ausgegeben Ist das zweite Datenelement nicht rich tig wird ebenfalls eine Fehlermeldung ausgegeben Ist das dritte Daten element falsch soll das Programm den
209. al gt L sung mit do Konstrukt do x 10 subl x y 0 addi y x 0 y print y y newline gt 0 81 10 eval gt Alternative end rekursive Funktion letrec Foo lambda x y cond x 0 y t print y y newline Foo subl x addi y Foo 10 0 gt 0 81 10 Legende Idee 180 S 32 Tabelle 2 3 Programmfragment Portierung von einem kleinen LISP System nach Scheme 2 1 VERSTEHEN EINER KONSTRUKTION 149 Zerlegungsgrad 0 K 49 oe 2 Legende K i Konstrukt mit der Identifizierungsnummer i auf der Abstraki onsebene j bzw dem Zerlegungsgrad j Setzt sich zusammen z B setzt sich K 5 aus K 9 und K 10 zusammen Eine Konstrukte Hierarchie wird auch als eine Modul Hierarchie bezeichnet Abbildung 2 1 Skizze einer Konstrukte Hierarchie Einheit um K 2 handelt oder nicht Ein solches Erkennungskonstrukt verh lt sich wie ein Pr dikat wie z B das number Konstrukt das pr ft ob ein numerischer Wert vorliegt Zu einem Konstruktor der n verschiedene Einheiten zusammenf gt ben tigen wir n verschiedene Pr dikate zum Erkennen der einzelnen Einheit Wir definieren daher f r unseren Konstruktor K 1 die kor respondierenden Pr dikate K 2 und K 3 Auf der n chst tieferen Ab straktionsebene hier Ebene 1 w ren z B f r den Konstruktor K 3 die Pr dikate K 7 und K 8 zu definieren Zus tzlich ben tigen wir korre
210. al gt While Beispiel gt Keine Ausgabe eval gt Until Beispiel gt Block verarbeitet Das obige Konstrukt Until Beispiel entspricht einer Sequenz aus Block und anschlie endem while Konstrukt Die Beziehungen zwi schen while und until Konstrukten zeigt Abbildung 1 21 S 100 Auf grund der Listen Dominanz bezieht sich in LISP die Wiederholung h ufig auf die Abarbeitung aller Elemente einer Liste Ist eine Funktion auf je des Element einer Liste anzuwenden dann bilden wir diese Iteration mit einem map Konstrukt mapping function ab LISP Systeme haben ein ganzes B ndel von mapping functions Einige sammeln die Werte der wiederholten Funktionsapplikation und geben diese als Wert zur ck an dere f hren die Funktionsapplikation nur zur Erzielung von Nebeneffek 100 KAPITEL 1 KONSTRUKTE Fall 1 Until Konstrukt ersetzt durch ein while Konstrukt Block x Block x lt gt Block x Fall 2 While Konstrukt ersetzt durch ein until Konstrukt Pee Legende Block y d lt gt Abbildung 1 20 S 98 lIdentitatsfunktion zweckm ig zur Kennzeichnung dass eine Blockeintragung nicht vergessen wurde Abbildung 1 21 Iterationskonstrukte ten durch ihr R ckgabewert ist unerheblich eval gt lt mapping_function gt lt user_function gt lt arguments gt gt lt return_ value gt mit lt return value gt Abh ngig von der jeweiligen lt mapping function gt entsteht ei
211. alitative Eigenschaft Aussage Wir diskutieren vier exemplarische Aussagen von denen wir unter stellen dass sie das Pr dikat Anforderung erf llen m gen Sie be ziehen sich auf den einfachen Regelinterpreter Diagnose Abschnitt 3 1 4 S 398 Al Diagnose fragt Fakten beim Benutzer nach A2 Diagnose ist benutzerfreundlich A3 Diagnose macht den Benutzer gliicklich A4 Diagnose ist Diagnose in Anlehnung an Volvo ist Volvo Die Aussagen A1 bis A4 unterscheiden sich erheblich in ihrer Reali sierbarkeit Die Aussage A1 ist eine zu erf llende Leistung die bei verfei nerter Spezifikation zur Definition der Konstrukte Benutzer Rueck frage und Nicht ableiten f hrt Abschnitt 3 1 4 S 398 Die Eigenschaft Benutzerfreundlichkeit bezeichnet eine Qualit t Die objektive Definition von Qualit t wird in der Philosophie oft als unm glich angesehen lt gt z B 142 Die Spezifikation einer Qualit t ist daher stark vom jeweiligen Konstrukteur abh ngig F r uns soll Be nutzerfreundlichkeit einerseits niedrige subjektive Bedienungskomple xit t f r den unge bten Benutzer und andererseits gro e Nutzungs flexibilit t f r den ge bten Benutzer umfassen Aspekte sind dabei die Darstellungsergonomie Kognitionsproblem Ablaufergonomie Konzen trationsproblem und die Funktionsergonomie Produktivit tsproblem Die Aussage A2 ist daher im Vergleich zu A1 st rker interpretations bed
212. ambda V_ Pair cond V null V Pair display V atom V car V_ Pair print V car V Pair cond V pair V cdr V Pair cond V null V cdr V_ Pair Ausgabe V cdr V Pair t display Ausgabe V cdr V_Pair t display Ausgabe V car V_ Pair H Abk rzung pp f r pretty print PP Konstrukte enth lt die PLT Scheme Bibliothek scheme pretty d h require scheme pretty S 473 222 KAPITEL 2 KONSTRUKTIONEN Ausgabe V cdr V Pair DIESE cond V pair V_Pair display i Ausgabe V_ Pair t print V Pair void eval gt define Foo V cons Emma V cons Krause V NULL eval gt Foo gt Emma Krause 0 0 eval gt V pp Foo gt Emma Krause eval gt define Bar V cons Frau Foo eval gt Bar gt Frau Emma Krause 0 0 eval gt V pp Bar gt Frau Emma Krause eval gt V pp V cons TAB V cons KeyA 1 V cons KeyB 2 V cons KeyC 3 V NULL gt TAB KeyA 1 KeyB 2 KeyC 3 2 3 3 Hohenbalancierter Baum Beispiel Aktenverwaltung Als Beispiel dient eine Verwaltung von Akten bei der man neue Akten anlegen und angelegte Aktenbeschreibungen modifizieren jedoch keine Akten entfernen l schen kann Programm S 229 Unterstellt wird f r jede Akte ein eindeutiges Aktenzeichen Key Jedem Aktenzeichen kann ein beliebiger Text als Inhaltsbesch
213. an Diese L sung ist auch weniger imperativ gepr gt wie folgt formulier bar eval gt define Selektion Firmen Kurzname lambda Liste Ersatz String cond length Liste 1 cond length Ersatz String 1 list ref Ersatz String 0 t UNBEKANNTER KURZNAMBE t list ref Liste 1 eval gt Selektion Firmen Kurzname Kunde 2 UNBEKANNTER KURZNAME San Vere Die Information dass die Funktion einen Selektor darstellt ist si cherlich k rzer mit einem vorgegebenen Pr fix z B get notierbar Die Information dass die erste 1ambda Variable an eine Liste zu binden ist kann ebenfalls k rzer notiert werden Wir k nnen f r eine ganze Konstruktion vereinbaren dass z B eine lambda Variable mit dem Na men L stets ein Argument vom Typ Liste erfordert Die zweite 1ambda Variable im Beispiel verweist auf einen String Diese Information ist in diesem Funktionsk rper unerheblich Die lambda Variable Ersatz_Str ing wird aufgrund der Punkt Paar Notierung in der Schnittstelle des Konstruktes stets an eine Liste gebunden lt gt Abschnitt 2 3 3 S 222 Das Konstrukt list ref Ersatz_String 0 selektiert das erste Ele ment unabh ngig davon von welchem Typ es ist Wir k nnen daher in diesem Konstrukt auf den Namensteil String verzichten L sung D e Standard Selektor Pr fix beim Funktionsnamen e Standard Namen f r lambda Variablen mit Informationen in Be zug auf die zul ssigen Argumente soweit erforderl
214. aneT PLaneT ist das zentrale System von PLT Scheme zur Distribution von Mo duln Paketen http planet plt scheme org Zugriff 15 Jan 2010 Einige Module k nnen vom PLaneT Server automatisch heruntergeladen werden Z B wenn man das erste Mal folgendes require Konstrukt eva luiert eval gt Automatisches Download von Version 1 0 der random plt Bibliothek und dann importieren des Moduls random ss require planet random ss schematics random plt 1 0 eval gt random gaussian gt 0 7386912134436788 Das planet Konstrukt erm glicht die Auswahl anhand von Versionsnum mern N heres dazu PLT Scheme Online Dokumentation 2 7 MODULE LOKALER NAMENSRAUM 329 2 7 2 Zusammenfassung Module Module sind mit Modulen kombinierbar und k nnen aus schon existie renden Modulen konstruiert werden Ihre Kommunikation erfolgt ber eine Import require und eine Exportschnittstelle provide In terne Namen sind nicht importierte und nicht als Export bereitgestellte Namen Module bernehmen eine Abschottungsaufgabe Daher sind die in ternen Namen vor dem Zugriff von au en d h von anderen Moduln aus gesch tzt Charakteristisches Beispiel f r Abschnitt 2 7 Die Datei Selbstreplikation ss enth lt den gleichnamigen Mo dul der eine zuf llige Folge aus kleinen Buchstaben erzeugt und diese auf dem Bildschirm ausgibt Dabei wird ein Evolutionsprozess bez glich dieser Buchstabenfolge
215. ant wortet und seinen neuen Vorgang am Anfang der zirkul ren Liste ein f gen will dann zeigen die Abbildungen 2 6 S 175 und 2 7 S 176 die nderung der Zeiger auf die cons Zellen Nochmals sei darauf hinge wiesen dass es sich nur um ein grafisches Modell f r das Verstehen der Mutatoren set set car und set cdr handelt In den Abbildungen 2 6 S 175 und 2 7 S 176 werden mit der An wendung der Mutatoren set car und set cdr auf Zirkulaere _Liste die Inhalte derjenigen cons Zellen geandert auf die sowohl die lambda Variable Zirkulaere_Liste selbst als auch die globale Varia ble ARBEITSPLAN zeigen Nach Beendigung des Programms wird die Bindung der lambda Variable wieder aufgehoben Die Bindung der glo balen Variable ARBEITSPLAN bleibt bestehen d h es gibt weiterhin in der top level Umgebung die Assoziation zwischen dem Symbol AR BEITSPLAN und den modifizierten cons Zellen Die Abbildung 2 8 S 177 zeigt das Einfiigen eines neuen Vorganges nach dem aktuellen Vorgang Hier ist wieder das Aufbrechen einer cons Zellen Kette und das Einf gen einer zus tzlichen cons Zelle durch den Mutator set cdr abgebildet IRRGARTEN Pi EINGANG wm E PA ug ui IRRGARTEN AUSGANG 2 2 ABBILDUNGSOPTION LISTE 175 Ausgangssituation L 0 0 0 u ARBEITSPLAN gt Zirkulaere Liste Element _1 Element _ 2 Element 3 Neue cons Zelle gt 0 Platzhalter set cdr Neue cons Zel
216. archie ber die provide und die require Schnittstelle Schritt 3 2 SPEZIFIKATION MIT LISP 417 f r Schritt verfeinern wir dieses Skelett Dabei notieren wir Restriktio nen und Nebeneffekte Charakteristisches Beispiel f r Abschnitt 3 2 Vorgabenarten Das System F rsorge Automation im Sozialamt ei ner Kommune ist ein Definitionsproblem mit einer mittleren Konstrukti onsgr e Abschnitt 60 S 414 Dazu sind folgende Aussagen notiert A1 Approximierbare Vorgabe F rsorge unterst tzt ausreichend das Sozialamt Management A2 Konkurrierende Vorgabe zu Al F rsorge sch tzt den Sachbearbeiter vor permanenter Arbeits kontrolle A3 3 Keine Vorgabe da Realisierbarkeit und Gestaltungsrelevanz fehlen F rsorge schafft gro e Freude Die schrittweise Approximation von A1 f hrt zu folgenden Aussagen A1 1 F rsorge bilanziert das IST Geschehen in Sozialamt bezogen auf Sachbearbeiter Vorgangsart und Zeitraum A1 2 F rsorge vergleicht die Bilanzergebnisse mit denen von hnli chen Sozial mtern A1 3 F rsorge stellt sogenannte if then Situationen dar Offensichtlich konkurriert A1 1 mit A2 Ein Kompromiss w re z B Al 1 F rsorge bilanziert das IST Geschehen im Sozialamt bezogen auf Abteilungen Vorgangsart alle 14 Tage Die Skizze einer ausgef llten Checkliste zur Modul Beschreibung k nnte sich wie folgt darstellen eval gt module Registratur scheme provide Neuzugang
217. ard 328 488 Bromley Hank 461 488 Brooks Fred 489 Brooks Rodney A 6 488 489 Broy Manfred 446 489 Buchegger O 373 487 build path 430 Burge William H 489 Burstall R M 489 button 475 BYSO LISP 463 INDEX call with current continu ation 271 286 call with output file 473 call cc 280 callback 475 Cambridge LISP 463 canvas 475 car 56 Carte James Allen 387 489 cdr 56 Chailloux Jerome 459 460 495 497 chaining backward 449 forward 449 Channel 364 char 242 Charniak Eugene 182 318 489 Christaller Thomas 328 490 Christerson M 418 493 Church Alonzo 28 36 489 circle 420 Clark Douglas W 489 class 329 class 340 class 33l Claus Volker 389 489 Clinger William 44 69 116 380 459 489 495 Clocksin W E 489 close input port 353 473 close output port 353 473 Closure Konzept 47 COBOL 13 comment 439 Common LISP 459 Common LOOPS 327 compile 105 compiled expression 105 Concurrency 356 cond 53 54 cons 58 copy 181 Corbett Albert T 487 Cosineau G 270 491 Coy Wolfgang 489 current input port 473 current seconds 438 gt 01 current thread 357 current memory use 367 current namespace 46 298 366 Curry H B 281 489 Curryfizierung 279 Custodian 367 custodian 367 custodian shutdown all 367 Danicic I 489 Darlington J 270 490 Data directed Programming 448 date gt string 438 date display format 438
218. as folgende Syntax hat eval gt mixin lt interface exprs gt lt inter face exprs gt lt class clause gt lt class clause gt 342 KAPITEL 2 KONSTRUKTIONEN lt interface exprs gt Die gegebene Klasse muss dieses Interface imple mentieren lt interface exprsy gt Die erzeugte Unterklasse muss dieses Interface implementieren lt class clause gt Die Klauseln die Erweiterung abbilden werden beim Evaluieren des mixin Konstruktes auf Uber einstimmung mit den Interfaces hin gepr ft Wir unterstellen nun die Analyse fiir die Entwicklung der Klasse Of fener Vorgang hatte zwei Teilaspekte ergeben zum Einen ein The ma Akte und zum Anderen ein Thema Bearbeitung Wir formulie ren f r beide Aspekte entsprechende Slots und Methoden ohne dabei die Superklasse hier Konto oder auch Verwahrkonto zu nennen Die beiden Aspekt formulieren wir allgemein so dass sie gegebenenfalls auch im Kontext anderer Superklassen genutzt werden k nnten eval gt define Akte mixin lambda class super new define Aktenzeichen XYZ define Standort Archiv define public get Aktenzeichen lambda Aktenzeichen define public get Standort lambda Standort define public set Aktenzeichen lambda Text set Aktenzeichen Text define public set Standort lambda Ort set Standort Ort eval gt define Bearbeitung mixin lamb
219. as define syntax rule Konstrukt bindet einen Makro der ein Muster engl pattern in die Vorlage engl template einarbeitet define syntax rule lt pattern gt lt template gt mit lt pattern gt Das Muster beginnt stets mit einem Identifier Nach diesem Initialidentifier sind die folgenden Identifier Variablen Macro Pattern Variablen die bei der Makroanwendung im Hinblick auf das Pas sen match im lt template gt genutzt werden lt template gt Ein Konstrukt das zum Muster passt und zwar in der Art das jede passende Variable in der Vorlage durch den Wert der Variablen ersetzt wird Der folgende Makro Tausch verdeutlicht die Wirkungsweise des de fine syntax rule Konstruktes lt gt Abbildung A 2 S 469 eval gt define syntax rule Tausch x y let Temp x set x y set y Temp list eval gt define First First eval gt define Second Second eval gt define Foo Tausch First Second eval gt Foo gt Second First 296 KAPITEL 2 KONSTRUKTIONEN eval gt First gt Second eval gt Second gt First eval gt define Foo Tausch First Second eval gt Foo gt First Second eval gt First gt First eval gt Second gt Second Das define syntax rule Konstrukt deklariert einen Namen als spezielles Schl sselwort Ist beim Evaluieren ein solches Schl sselwort in funktionaler Stellung d h erstes Element einer Liste dann wird zu n chst die Ex
220. as erste Element der Li ste an das Ende der unterstellten Teill sung angeh ngt Ben tigt wird eine Funktion die ein solches Anh ngen an eine Liste erm glicht Das entsprechende Konstrukt hei t append deutsch hinzuf gen Es ver kn pft zwei Listen miteinander eval gt append 1 2 3 45 gt 1 2 3 4 5 Damit ist die Definition von Umdrehen wie folgt formulierbar eval gt define Umdrehen lambda x cond null x lisE t append Umdrehen cdr x list car x eval gt Umdrehen 1 2 3 gt 3 2 1 Das append Konstrukt ist ebenfalls rekursiv definierbar Wir nennen es um ein berschreiben zu vermeiden Anhaengen Ein trivialer Fall 1 3 REKURSION ALS PROBLEMLOSUNGSMETHODE 129 ist gegeben wenn der Wert eines Argumentes von Anhaengen die lee re Liste ist Die zugehorige Losung ist dann die jeweils andere Liste Da mit dem cons Konstrukt ein Mittel vorhanden ist an den Anfang einer Liste ein Element einzuf gen nehmen wir die Liste des zweiten Argu mentes von Anhaengen als Ausgangsbasis und betrachten das Problem als Einf gen der Liste des ersten Argumentes Wir unterstellen wieder die Existenz einer Teill sung n mlich das Verkn pfen der Restliste des ersten Argumentes mit der Liste des zweiten Argumentes Die L sung f r das Gesamtproblem ist dann das Einf gen des ersten Elementes der ersten Liste in diese Teill sung Das Einf gen bernimmt das cons Konstrukt Damit ist An
221. ate College Pennsylvania war ein amerikanischer Mathematiker 282 KAPITEL 2 KONSTRUKTIONEN Das Curryfizieren hat eine Hierarchie von zwei 1ambda Konstrukten bewirkt und die lambda Variable Funktion auf die obere Ebene ge hoben Die Selbst bergabe Funktion Funktion ist jedoch noch tief in dem Konstrukt lambda Liste enthalten Der n chste Schritt gilt dem Herausl sen von Funktion Funktion Dazu defi nieren wir eine lokale Funktion Sum mit den beiden 1ambda Variablen Fkt und Lst Wir bergeben Sum unseren Selbstbezug Funktion Funktion als erstes Argument eval gt let Summe lambda Funktion lambda Liste let Sum lambda Fkt Lst cond null Lst 0 number car Lst car Lst Fkt cdr Lst t Fkt cdr Lst Sum Funktion Funktion Liste Summe Summe Zahlungen gt 80 0 Da die lokale Funktion Sum zwei lambda Variablen Fkt und Lst hat Curryfizieren wir Sum Dabei ist zu beachten dass auch der Sum Aufruf anzupassen ist eval gt let Summe lambda Funktion lambda Liste let Sum lambda Fkt lambda Lst cond null Lst 0 number car Lst car Lst Fkt cdr Lst t Fkt cdr Lst Sum Funktion Funktion Liste Summe Summe Zahlungen gt 80 0 Analysiert man die bisher erreichte Losung so zeigt sich dass es kei nen Grund gibt die lokale Funktion Sum auf einer so tiefen Ebene zu de finieren Wir k nnen sie z
222. atei A den Wertebereich Ist es ein Zahlatom oder String Z B Zahl Bilanz Aktiva oder String Bilanz Aktiva 5 die Aufgabe Ist es eine lambda Variable ein Argument eine Hilfsvariable etc Z B BilanzAktiva Unterstrich f r eine lambda Variable Bilanz Aktiva Bindestrich f r Argument BA weniger als 3 Buchstaben f r tempor re Hilfsvariable 6 die Lebensdauer Persistenz Ist der Speicherort eine Stamm Bewegungs Hilfs Datei oder der Arbeitsspeicher Z B DB Kunde Stammdatei Datenbank WS Kunde _ Arbeitsspeicher working storage Empfehlungen zur Namensvergabe beziehen sich haufig auf konstruk tionsspezifische Informationen So wird empfohlen einen Konstruktor 380 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Bewertungskriterium langer kurzer Name Name mnemotechnische Aussagekraft Lesbarkeit Leseaufwand Schreibaufwand Schreibfehlerrisiko Legende Vorteil Nachteil Tabelle 3 1 Namensl nge Vor und Nachteile lt name gt lt praefix gt lt stamm gt lt suf fix gt Empfehlung Beispiel f r einen Konstruktor Make lt praefix gt Make Window f r ein Pr dikat 2 lt suffix gt EOF Object f r ein destruktives lt suf fix gt set cdr Konstrukt Mutator f r eine besondere lt praefix gt globale Variable lt suffix gt GRAPHICS COLORS f r eine eingebaute lt praefix gt eof Konstante Tabelle 3 2 Affix
223. atten Begrenzungen auf so dass eine L nge oder ein Fl cheninhalt nicht zu bestimmen ist Beim genauen Hinschauen findet man solche Fractals berall in der Natur lt gt 118 Der Blumenkohl Kopf ist ein populares Beispiel Ein praxisna hes Software Konstruktionsgebiet ist die Computer Animation Man mo delliert z B mit stochastischen Fraktalen detailreiche Gebirgsketten Die A 3 PLT SCHEME UBERSICHT 477 Koch sche Schneefocke geh rt wie auch das popul re Apfelm nnchen zur deterministischen kausal abh ngigen Fraktale da sie mit einer ein fachen Rekursionsformel beschreibbar ist Fraktale Kunstwerke z B 139 Fraktale Koch Kurve mit imperativer Turtle Grafik module Koch Kurve scheme require graphics turtles provide Koch Kurve define Koch Kurve lambda n 1 let startpunkt lambda turn 180 move 300 turn 90 move 200 turn 90 fractale lambda n 1 cond n 0 draw 1 t fractale n 1 1 4 turn 300 fractale n 1 1 4 turn 120 fractale n 1 1 4 Turn 300 fractale n 1 1 4 startpunkt fractale n 1 turn 120 fractale n 1 turn 120 fractale n 1 turtles Die bekannte Kinderzeichnung Das Haus des Nikolaus lt gt Abbil dung A 5 S 478 verdeutlicht die funktions gepragten Turtle Konstrukte Dabei ist das Haus ohne Absetzen des Stiftes unter der Bedingung dass keine Linie doppelt
224. azu nutzen wir das eval Konstrukt Da dieses vorab von seinen Argumenten die Werte er mittelt konstruieren wir das Konstrukt define Baz lambda x y x y mit Hilfe des 1ist Konstruktes S 43 eval gt define Foo lambda define env make base namespace eval list define Baz lambda x y x y env env eval gt Baz gt ERROR reference to an identifier before its definition Baz eval gt eval Baz 2 4 Foo gt 6 1 1 EINFUHRUNG HANDHABUNG VON KONSTRUKTEN 47 Das Closure Konzept wurde 1964 von PJ Landin im Zusammenhang mit seinem Vorschlag f r die Auswertung von Lambda Ausdr cken an gegeben 113 Es ist die L sung f r Probleme beim Umgang mit Funktionen als Argumente und als R ckgabewerte von Funktionen Die se sogenannten Funarg Probleme treten auf wenn die Funktion beim Aufruf nicht mehr ber ihre Definitionsumgebung verf gt z B 132 Exkurs Funarg Probleme Man spricht vom downward funarg Problem wenn eine lambda Variable an eine Funktion gebunden wird d h eine Funktion ist Wert eines Argu mentes Das upward funarg Problem entsteht wenn der Wert einer Funk tion eine Funktion ist d h eine Funktion gibt eine anschlie end anzu wendende Funktion zur ck Klassische LISP Systeme k nnen die Funktion nur mit der Umgebung abarbeiten die bei ihrem Aufruf besteht Die Definitions Umgebung ist nicht mit der Funktion verkn pft Da die Umgebung beim Aufruf
225. bedeutend gt Mode GmbH MoG eval gt define 4711 Firmen Name Make Koln Wasser AG KWG Option Alias Namen Mit Hilfe des alias Konstruktes kann ein Name wie ein anderer schon existierender Name verwendet werden Beide Namen bezeichnen diesel be Einheit Man k nnte spontan einen Sonntagsnamen und einen All tagsnamen kreieren Der Sonntagsname ist lang und enth lt die gew n schten Informationen Der Alltagsname ist eine Kurzschreibweise dessen Zun chst wird nur der Sonntagsname genutzt K me dieser Name jedoch in einem Textbereich h ufig vor dann wechselt man zum Alltagsnamen Man mutet dem Leser zu sich die Bedeutung eines h ufig notierten Na mens einzupr gen um die Verk rzungsvorteile nutzen zu k nnen L sung I e zwei Namen eval gt define syntax rule gt Symbol Wert define Symbol Wert eval gt define syntax rule f x eval lambda x eval gt gt Firmen Kurzname Get L Ersatz cond length L 1 LISP angepasste Editoren erleichtern die Eingabe des Fluchtsymbols indem sie gleich zwei senkrechte Striche mit der aktuellen Cursor Stellung in der Mitte bei Eingabe eines senkrechten Striches erzeugen 3 1 TRANSPARENZ DER DOKUMENTATION 389 cond length Ersatz 1 list ref Ersatz 0 t UNBEKANNTER KURZNAME t list ref L 1 eval gt Firmen Kurzname Get Kunde 2 zes Mapal Die Gefahren die eine solche doppelte Benennun
226. benen Methode super get Identifizierung define public get Kurzname Inhaber lambda substring get Name Inhaber 0 3 eval gt define V001 20Prazise mit gleicher Signatur 340 KAPITEL 2 KONSTRUKTIONEN new Verwahrkonto id 7 name Otto Mustermann eval gt send V001 get Identifizierung gt gt Tas 7 Interface Ein Interface Schnittstelle wird erklart um sicher zu stellen dass ein Objekt eine vorgegebene Menge von Methoden versteht Das inter face Konstrukt hat folgende Syntax eval gt interface lt super interface gt lt id gt lt id gt mit lt super interface gt Ein Interface dessen Deklarationen bernom men werden lt id gt Name der Methode F r Verwahrkonten definieren wir ein Interface mit einem sehr ver einfachten Interface lt super interface gt f r Konten Um zu deklarie ren dass die Klasse tats chlich das angegebene Interface implementiert ist statt dem class Konstrukt das class Konstrukt zu verwenden eval gt define Konto interface interface get Identifizierung eval gt define Verwahrkonto interface interface Konto interface set Buchungsgrund get Name Inhaber get Kurzname Inhaber eval gt define Verwahrkonto class Konto Verwahrkonto interface field Buchungsgrund field Bearbeiter unbekannt define public set Buchungsgrund lambda Text set Buchungsgrund string append Text Bu
227. bernimmt damit die Aufgabe der Neubenennung von Werten Charakteristische Beispiele f r Abschnitt 1 1 eval gt define M ller OHG Kunde eval gt define Meyer AG quote M ller OHG eval gt eval Meyer AG gt Kunde eval gt Meyer AG gt M ller OHG eval gt M ller OHG gt Kunde eval gt eval eval eval eval 12 3 4 gt 10 eval gt 1 2 3 4 gt 10 eval gt define Zustimmung nie und nimmer eval gt if Zustimmung Wahlen Nicht wahlen gt W hlen Der Wert von nie und nimmer ist ungleich false Die Bedingung gilt als erf llt daher wird der True Fall evaluiert eval gt define Zustimmung 2 3 eval gt if Zustimmung Wahlen Nicht wahlen gt Wahlen Der Wert 5 ist ungleich false Evaluiert wird daher der True Fall eval gt define einzahlen lambda Konto Name Einzahlungsbetrag eval list set Konto Name eval Konto Name 50 KAPITEL 1 KONSTRUKTE Einzahlungsbetrag eval gt define Meyer AG 100000 0 eval gt einzahlen Meyer AG 300000 0 eval gt einzahlen Meyer AG 800000 0 eval gt Meyer AG gt 1200000 0 eval gt define gt Achtung Es wird ein eingebautes Symbol modifiziert eval gt 3 4 gt 1 1 2 Kombinieren von Konstrukten Eine spezifizierte Aufgabe zu programmieren bedeutet passende Kon strukte selbst zu definieren und dies
228. bject Argument zur Initialisierung init id name Slots public field Identifizierung id field Name Inhaber name field Adresse Inhaber private define Einzahlungen null define Auszahlungen null define Kontostand 0 Initialisierung der Superklasse super new 1 Methoden Selektoren define public get Identifizierung lambda Identifizierung define public get Name Inhaber lambda Name Inhaber define public get Adresse Inhaber lambda Adresse Inhaber define public get Einzahlungen lambda Einzahlungen define public get Auszahlungen lambda Auszahlungen define public get Kontostand lambda Kontostand Methoden Mutaloren define public set Name Inhaber lambda Name set Name Inhaber Name define public set Adresse Inhaber lambda Adresse set Adresse Inhaber Adresse define public set Einzahlungen lambda Wert set Einzahlungen Wert define public set Auszahlungen lambda Wert set Auszahlungen Wert Nur intern zugreifbar define set Kontostand lambda Wert set Kontostand Wert Anwendungsspezifische 2 8 KLASSE INSTANZ MODELL 339 Methoden define Betrag lambda X and number X gt X 0 define Buchungsdatum lambda X and number X gt X 100101 define public Add Einzahlung lambda E Datum Betrag cond and Buchungsdatum E Datum Betrag Betrag
229. bn t member Get erste Bedingung b_n AUSSAGEN test Get Rest Bedingungen b_n Zielbildung Get Objekt Get erste Bedingung b_n Get Eigenschaft Get erste Bedingung b n Zielbildung kann AUSSAGEN modifizieren daher erneutes Nachschauen in AUSSAGEN cond member 402 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Get erste Bedingung b_n AUSSAGEN test Get Rest Bedingungen b_n t t pruefe Regeln lambda Regeln cond null Regeln null test Get Bedingungen Get erste Regel Regeln Aussage in AUSSAGEN Get aktion Get erste Regel Regeln t pruefe Regeln Get Rest Regeln Regeln Zielbildung lambda akt Objekt akt Eigenschaft cond Get Wert in AUSSAGEN akt _ Objekt akt Eigenschaft nicht ableiten akt Eigenschaft benutzer rueckfrage akt_Objekt akt Eigenschaft pruefe Regeln Relevante Regeln Get Regeln akt Eigenschaft akt _ Objekt akt Eigenschaft t Starten der Regelabarbeitung Zielbildung Objekt Eigenschaft AUSSAGEN Beispieldaten f r das Programm Diagnose eval gt define AUSSAGEN Benzinpumpe arbeitet korrekt eval gt putprop arbeitet Regeln Batterie Strom aussreichend Kabel Kontakte leitend Motor arbeitet gut Benzinversorgung arbeitet nicht Motor arbeitet nicht Lichtmaschine arbeitet nicht Motor arbeitet nicht Tankfuellung Stand a
230. bung Um diesen Vorgang zu verdeutlichen definieren wir eine Funktion deren Name keine Rolle spielt Wir nennen sie Foo so gut wie Sinnlos Hinweis Bedeutungsloser Name Das Symbol foo oder Foo ist eine Silbe ohne Bedeutung allerdings mit einer langen LISP Historie Foo wird allgemein verwendet wenn der Na me des Konstruktes unerheblich ist Reicht ein Symbol nicht aus dann 1 1 EINFUHRUNG HANDHABUNG VON KONSTRUKTEN 43 verwendet man haufig als weitere bedeutungslose Namen bar und oder baz eval gt define Foo lambda x define Mein Symbol 0 set Mein Symbol 10 Mein Symbol eval gt Foo gt lt procedure Foo gt eval gt Foo 5 gt 10 R ckgabewert von Mein Symbol eval gt Mein Symbol gt ERROR Symbol ist nicht definiert in der aktuellen Umgebung Weil ein Lambda Konstrukt eine neue Umgebung aufbaut f hrt die folgende spontane Formulierung nicht zur gew nschten Zustands nde rung unseres Kontos eval gt define Abbuchen lambda Konto Name Abbuchungsbetrag set Konto Name hier wird das Symbol ben tigt eval weil jetzt der Wert von Konto Name ben tigt wird eval Konto Name Abbuchungsbetrag Konto Name eval gt Meyer AG gt 1000000 0 eval gt Abbuchen Meyer AG 300000 0 gt 700000 0 eval gt Meyer AG gt 1000000 0 Nicht verandert Die destruktive Veranderung des set Konstruktes betrifft die vom lambda Konstrukt erzeugte Umgebung und nicht die Ausga
231. c 00000 lambda V 1 V 2 if or eq V 1 ENDE eq V 2 ENDE begin lt exit sexpr_ a gt Teex r sexpr D gt begin lt body sexpr gt 300000 Ney iter sexpr gt Weve iter sexpr gt 00000 hevy L 1nit sexpr tayo m L sexpr n Zum Verst ndnistraining expandieren wir die L sungen 1 und 3 des obi gen Beispiels Siebenmal eine konstante Zeichenkette ausgeben PC Scheme eval gt EXPAND MACRO do Zaehler 7 Zaehler 1 0 Zaehler print LISP hat ein dia logisches Konzept newline gt letrec 300000 lambda Zaehler let 00001 O0 Zaehler if 300001 600001 begin print LISP hat ein dia logisches Konzept newline 400000 Zaehler 1 300000 7 PC Scheme eval gt EXPAND MACRO do Zaehler 6 Zaehler 1 begin print LISP hat ein dia logisches Konzept 0 Zaehler gt letrec 300000 lambda Zaehler 1 2 KOMBINIEREN VON KONSTRUKTEN ze Legende f fit IH Ir naar IN AN WHOS ZN NSS ZEN INS See OSS SSE NN WISSEL AN NICH My LH IN Nee es NEE SASE EE TEY SE SSO SSO RALLY
232. ch vollzogener Auswertung werden die geschaffenen Bindun gen der lambda Variablen wieder aufgelost Die alte Umgebung wird wieder zur aktuellen Umgebung Bildlich formuliert entspringt die lexikalische Bindung folgender Uber legung Wenn jemand einen Satz Funktion formuliert dann unterstellt er seinen Worten Symbolen eine bestimmte Bedeutung Er unterstellt z B die Erl uterungen im Sinne des Lexikons Duden Sein Satz wird m glicherweise falsch interpretiert wenn der Leser ein anderes Lexikon annimmt Die Verkn pfung der Funktion mit dem Definitionslexikon soll die korrekte Interpretation sichern 1 1 5 Zusammenfassung eval apply und lambda LISP LISt Processing ist eine formale Sprache eine dialogorientierte Software Entwicklungsumgebung eine Menge vordefinierter Konstruk te und ein Formalismus zur Spezifikation LISP Konstrukte haben eine einfache Syntax Grammatik und als Dialekt Scheme eine einfache Semantik Bedeutung Symbole Zahlen Zeichen Zeichenketten und Listen sind symbolische Ausdr cke Jeder symbolische Ausdruck ist ein syntaktisch korrekt konstruiertes LISP Programm Die Regeln zur Aus wertung symbolischer Ausdr cke EVAL Regeln definieren die Seman tik Sie bilden das eval Konstrukt Den READ EVAL PRINT Zyklus notie ren wir wie folgt eval gt lt sexpr gt gt lt sexpr gt Ist eine Liste zu evaluieren dann bestimmt das erste Element wie die restlichen Listenelemente behandelt we
233. chaftsliste speichern wir f r jeden verk rzten Na men die vollst ndige Fassung Dazu formulieren wir zwei Makros Der Makro schreibt die Erl uterung in die Eigenschaftsliste Der Makro 3 1 TRANSPARENZ DER DOKUMENTATION 389 erm glicht das Nachfragen Da die Eigenschaftsliste global ist kann in jeder Umgebung nachgefragt werden zu den Nachteilen dieser Globa lit t Abschnitt 2 2 3 S 191 L sung F e L sung E in Verbindung mit einem Daten Lexikon als Eigenschafts liste P Liste Abschnitt 2 2 3 S 191 Das gensym Konstrukt gew hrleistet das keine andere Eigenschaft berschrie ben wird lt gt Abschnitt 2 4 4 S 259 eval gt define IST gensym eval gt define syntax rule Symbol Doku putprop Symbol IST Doku eval gt define syntax rule Symbol getprop Symbol IST eval gt define Get F K Name begin Get F K Name Kurzname der Firma Name Ersatzwert f r den Kurznamen der Firma lambda L Name cond length L 1 cond length Name 1 list ref Name 0 t UNBEKANNTER KURZNAME fe last ret L 1 eval gt Get F K Name Kunde 1 UNBEKANNTER KURZNAME gt SAG eval gt Get F K Name gt Kurzname der Firma Name gt Ersatzwert f r den Kurznamen der Firma eval gt Das so mitgef hrte Lexikon ist eine wenig effiziente beschr nkt n tzliche L sung die beim Testen hilft auch docu
234. che gestaltungsrelevanten Aussagen bezeichnen wir im Folgenden als Vorgaben F r eine Vorgabe ist zumindest itera tiv ein Realisierungsplan entwickelbar der ordnungsgem vollzogen zu einem akzeptablen Ergebnis f hrt Ein Ergebnis ist akzeptabel wenn die SOLL IST Abweichung eine Toleranzgrenze nicht berschreitet also kleiner einer vorgegebenen duldbaren Abweichung ist Wir definieren ein entsprechendes Pr dikat wie folgt eval gt define Realisierbar lambda Anforderung Duldbare Abweichung lt Bestimme SOLL IST Abweichung Feststellen IST Verhalten bezogen auf SOLL Planvollzug Planung Anforderung Duldbare Abweichung Duldbare Abweichung Entsprechend diesem Pr dikat kann die Duldbare Abweichung oder die Anforderung selbst modifiziert werden um Realisierbarkeit zu erreichen Die Aussage A2 Benutzerfreundlichkeit zeigt dass auch die Modifikation einer Anforderung in gewissen Interpretationsgrenzen in Betracht kommen kann Statt einen Teil von A2 mit A2 i berlap pende Bildschirmfenster zu approximieren ist ein Teil von A2 als Kom mandos ber Funktionstasten A2 j interpretierbar In der Regel ist jedoch die Toleranzschwelle das Mittel um eine Realisierbarkeit noch zu erreichen F r eine Vorgabe k nnen wir daher folgendes Pr dikat definieren eval gt define Vorgabe lambda Anforderung Duldbare Abweichung letrec Anforderung lambda Aussage and
235. chen von Sozialhil fe Es unterst tzt die Antragstellung die Aktenverwaltung und die Ak tualisierung von Berechnungsgrundlagen und Regels tzen Die Anforderungen seien so weit erarbeitet dass der Entwurf ei ner Modul Hierarchie zu spezifizieren ist Wir skizzieren diese grob wie folgt Nur als Platzhalter eval gt module Regels tze scheme eval gt module Berechnungsgrundlage scheme eval gt module Antragsteller scheme eval gt module Zugangspr fung scheme provide Befugnis define effects Sozialamtsleiter Abteilungsleiter Sachbearbeiter und Mitarbeiter haben unterschiedliche Befugnisse Zugangspr fung verwaltet entsprechende Passw rter define Fortschreibung Passwort lambda define Befugnis tambGa Cesc soa eval gt module Aktenverwaltung scheme provide Vorgang require Antragsteller define effects Aktenverwaltung speichert fur jeden Antragsteller alle ihn betreffenden Vorgange unabhangig vom Sachbearbeiter in einer Akte Fur festgestellte Anspruche generiert Aktenverwaltung die Auszahlungsanordnung Das Aktenzeichen Name des Antragstellers oder der eines betroffenen Familienmitgliedes sind Selektionsmerkmale define Vorgang Lambda as ax was define Auszahlungsanordnung lambda eval gt module Anspruchsanalyse scheme 3 2 SPEZIFIKATION MIT LISP 415 provide Bescheid require Regelsatze Berechnungsgrundlage define effects Anspr
236. chgebiet Informa tik auch eine Beschreibung wie der Autor das LISP Wissen gewonnen hat das andere schon langst veroffentlicht haben Trotz alledem wur de versucht diese Entdeckungsreise aus eigenstandiger Sicht zu zei gen Ein Fachbuch wie dieses ist eigentlich niemals fertig wahrend man daran arbeitet lernt man immer gerade genug um seine Unzulang lichkeiten klarer zu sehen Schlie lich ist es jedoch inclusive erkann ter Unzul nglichkeiten der ffentlichkeit zu bergeben F r diese Un zul nglichkeiten bitte ich Sie abschlie end um Ihr Verst ndnis End Session A This will end your session Cancel Anhang A LISP Systeme U Probleme erfordern unterschiedliche Rechnerleistun gen kombiniert mit problemangepassten LISP Systemen Ein All zweckrechner mit einem Allzweck LISP System bestehend aus LISP In terpreter und oder LISP Compiler stellt stets ein Kompromiss dar wo bei im Einzelfall mehr oder weniger Nachteile in Kauf zu nehmen sind F r die jeweilige LISP Hard Software Kombination bestehen zumindest vier Optimierungsaufgaben lt gt z B 144 1 effizienter Funktionsaufruf 2 Verwalten der Umgebung deep access oder shallow access 3 effizienter Zugriff auf Listenelemente bei konomischer Listenre pr sentation 4 Speicherplatzverwaltung heap maintenance mit zweckm igem garbage collection Evaluieren wir z B Foo Bar dann k nnen die Werte von Foo und Bar vom Typ Integer
237. chungsgrund super new inherit get Name Inhaber define override get Identifizierung lambda string append TOs M number gt string 2 8 KLASSE INSTANZ MODELL 341 super get Identifizierung define public get Kurzname Inhaber lambda substring get Name Inhaber 0 3 eval gt define V001 new Verwahrkonto id 7 name Otto Mustermann Mit dem is a Konstrukt dass als erstes Argument ein Objekt hat und als zweites eine Klasse oder ein Interface kann festgestellt werden dass V001 sowohl dem Datentyp Interface hier Verwahrkonto in terface und Konto interface wie dem der Klasse hier Verwahr konto und Konto entspricht eval gt is a V001 Verwahrkonto interface gt C eval gt is a V001 Verwahrkonto gt t eval gt is a V001 Konto interface gt Ft eval gt is a V001 Konto gt Ft eval gt define Foo class object super new eval gt is a V001 Foo gt f Mixins Sogenannte Mixins werden mit dem mixin Konstrukt erzeugt Dabei handelt es sich um eine Funktion die eine Klassenerweitung erzeugt wobei die Superclass zun chst unspezifiziert bleibt Jedesmal wenn ein Mixin f r eine spezifizierte Superclass dann appliziert wird erzeugt es eine neue abgeleitete Klasse die die entsprechende Erweiterung um fasst Anhand der Klasse Of fener Vorgang verdeutlichen wir Schritt f r Schritt das Mixins Konzept und dabei auch das mixin Konstrukt d
238. chungsgrund string append Text Buchungsgrund super new Direkter Zugriff dadurch moglich inherit get Name Inhaber define public get Kurzname Inhaber lambda 2 8 KLASSE INSTANZ MODELL 339 substring get Name Inhaber 0 3 eval gt define V001 new Verwahrkonto id 7 name Otto Mustermann eval gt send V001 get Kurzname Inhaber oe Um die Performance hnlich zum inherit basierten Methodenauf ruf zu erzielen wenn von ausserhalb der Klasse der Methode der Aufruf erfolgt dann ist das generic Konstrukt anzuwenden eval gt define get Verwahrkonto Name Inhaber generic Konto get Name Inhaber eval gt send generic V001 get Verwahrkonto Name Inhaber gt Otto Mustermann Soll eine Methode deklariert in der vererbenden Klasse Superclass mit gleichem Namen in der erbenden Klasse Subclass deklariert wer den und zwar im Sinne des berschreibens hier get Identifizie rung dann kann auf die Superclass Methode mittels dem super Kon strukt zugegriffen werden wie das folgende Beispiel zeigt eva gt define Verwahrkonto class Konto field Buchungsgrund field Bearbeiter unbekannt define public set Buchungsgrund lambda Text set Buchungsgrund string append Text Buchungsgrund super new inherit get Name Inhaber define override get Identifizierung lambda string append Tds T number gt string Applikation der gerade berschrie
239. ckelt Ihr Schwer punkt lag auf auf dem LISP Dialekt InterLISP D eine Software Entwick lungsumgebung mit damals neuartiger Unterst tzung f r den Program mierer Beispielsweise war in InterLISP D ein Programmierassistent in tegriert der Schreibfehler erkannte und beim Debugging behilflich war F r die objekt orientierte Programmierung gab es statt Flavors Common LOOPS eines der Ausgangssysteme f r den Standard CLOS Common LISP Object System Abschnitt 2 8 S 327 Warum gibt es keine LISP Maschinen mehr auf dem Computermarkt Unter der berschrift Why Did Symbolics Fail gibt der Common Lisp Entwickler Daniel L Weinreb eine glaubhafte Erkl rung Dort bemerkt er abschlie end I thought I d never see Lisp again But now I find myself at ITA Software where were writing a huge complex transaction processing system a new airline reservation system initially for Air Cana da whose core is in Common Lisp We almost certainly have the largest Dan Weinrebs blog http danweinreb org blog why did symbolics fail Zugriff 22 Jan 2010 462 ANHANG A LISP SYSTEME team of Common Lisp programmers in the world Our development envi ronment is OK but I really wish I had a Lisp machine again Mainframes Sowohl f r die IBM Welt LISP VM Franz LISP Le_LISP etc als auch f r die Siemens Welt sind leistungsf hige LISP Systeme vorhanden lt gt z B 167 Gravierende Nachteile gegen ber den LISP
240. cond Konstruktes wird durch keinen Ausgabewert repr sentiert Um ein sol ches Durchlaufen zu vermeiden ist es zweckm ig am Schluss eines cond Konstruktes eine true Klausel t zu formulieren Hinweis true Schlussklausel Jeder symbolische Ausdruck dessen Wert ungleich false ist kann als Pr dikat verwendet werden um eine Klausel zu definieren die auf jeden Fall zutrifft also die Aufgabe einer Sonst Regel otherwise case bernimmt Traditionell verwendete man das Symbol T In Scheme hat der Wahrheits wert true die Repr sentation t F r die Unterscheidung z B zwischen einem Kunden und einem Lie feranten entsprechend Tabelle 1 3 S 53 ben tigen wir passende Pr di kate damit das cond Konstrukt die Auswahl der jeweiligen Operationen bernehmen kann F r die Typerkennung unterstellen wir hier dass die 56 KAPITEL 1 KONSTRUKTE eval gt define Meyer AG Kunde Daten zur Meyer AG eval gt define M ller OHG Kunde Daten zur M ller OHG eval gt define Schulze GmbH Lieferant Daten zur Schulze GmbH eval gt define Verwahrung 1 Kassenkonto Daten zum Verwahrkonto 1 Legende Beispiele f r Kunde Lieferant und Kassenkonto entsprechend Tabelle 1 3 S 53 Tabelle 1 4 Programmfragment Kunde Lieferant und Kassenkonto Daten eines Kunden in Form einer Liste abgebildet sind deren erstes Ele ment das Symbol Kunde ist F r einen Lieferanten ein Kassenkonto etc gibt
241. cons x list A B C gt A A BB C C Die rekursive Definition des map Konstruktes zeigt eine haufig vor kommende Losungsstruktur Salopp LISP isch formuliert CDRing down the list and CONSing up the answer 1 3 2 Verkn pfung von Teilproblem L sungen Beispiel nderung eines Textes der als Baumstruktur vorliegt Wir definieren eine Funktion Ersetzung die in einem Text ein be stimmtes Wort durch ein neues Wort ersetzt Der Text ist als Baum struk turiert d h als eine Liste die wiederum Listen als Elemente enth lt Als Textbeispiel dient wie in Abschnit 1 3 1 S 119 wieder 87 BGB eval gt define BGB 7 1 Wer sich an einem Orte st ndig niederl t begr ndet an diesem Orte seinen Wohnplatz 2 Der Wohnplatz kann gleichzeitig an mehreren Orten bestehen 3 Der Wohnplatz wird aufgehoben wenn die Niederlassung mit dem Willen aufgehoben wird sie aufzugeben In diesem Text ist das Wort Wohnplatz falsch es ist durch Wohn sitz zu ersetzen F r das zu definierende Konstrukt wird offensichtlich 1 3 REKURSION ALS PROBLEMLOSUNGSMETHODE 123 eine Schnittstelle mit drei Parametern benotigt die wir wie folgt be nennen Objekt das zu ersetzende alte Wort Ersatz das neue Wort Struktur der strukturierte Text in dem ersetzt wird Entsprechend der rekursiven Problemlosungs Methode suchen wir zunachst nach trivialen Fallen bei denen die Losung bekannt und da mit direkt angebbar ist
242. cument has moved lt A HREF http www zeit de index gt here lt A gt lt P gt lt HR gt lt ADDRESS gt Apache 1 3 34 Server at www zeit de Port 80 lt ADDRESS gt lt BODY gt lt HTML gt lt eof gt Thread Kommunikation eval gt define Work lambda let fun lambda x cond equal x Bahn display Ok t display x display gt task Meyer thread lambda sleep 0 5 for each fun Lager Hof Haus Bahn task Schulze thread lambda thread wait task Meyer for each fun Garten Bahn Auto Lager sleep 1 done eval gt Work gt Lager gt Hof gt Haus gt Ok Garten gt Ok Auto gt Lager gt done 370 KAPITEL 2 KONSTRUKTIONEN Kapitel 3 Konstruktionsempfehlungen as Primarziel der Softwarekonstruktion ist eindeutig und unstrittig Es ist e n tzliche Software zu konstruieren d h Software die eine n tzliche Aufgabe erledigt wobei die Erle digung vereinfacht oder erst erm glicht wird e und zwar hinreichend fehlerfrei und termingerecht Von diesem Prim rziel leiten sich eine Vielzahl von Sekund rzielen ab wie zZ B 1 Konstruiere Programm teil e in gew nschter Qualit t 2 Konstruiere Programm teil e die wiederverwendbar sind 3 Konstruiere Programm teil e die sich pflegen und erg nzen las sen 371 372 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN 4 Konstruiere Programm teil e die dokumentierbar und durchschau bar
243. d seelischen Merk malen der Eltern auf die Nachkommen Angelehnt an diese biologische Betrachtung w re f r LISP Systeme die Genetik von der Klassifikati on zu unterscheiden Genetische Vererbung f hrt nicht zur Weitergabe jeder Eigenschaft eines Objektes Holzschnittartig formuliert Wenn die Mutter eine schmale Nase hat kann die Tochter eine breite haben Die Klassifikation entspricht der Wiederanwendbarkeit einer Beschreibung beim Nachkommen zur mathematischen Betrachtung der Vererbung z B 185 Au erdem ist mit dem Begriff Vererbung noch ein Modus letzter Wille Testament assoziierbar Dieser steht f r fast v llig frei es Weitergeben Der Mechanismus des define struct Konstruktes vererbt alle Fel der mit ihren voreingestellten Werten Er hat folgende Syntax die ge genuber der oben spezifizierterten lt gt S 309 um lt super structure name gt erweitert ist eval gt define struct lt structure name gt lt super structure name gt lt slot gt lt slot option gt 2 6 GENERIERTE ZUGRIFFSKONSTRUKTE 315 lt struct option gt mit lt super structure name gt Ein Symbol das die Struktur benennt von der geerbt wird Fur das Verwahrkonto geben wir daher die Struktur Konto als lt SUper structure name gt an eval gt define struct Verwahrkonto Konto Buchungsgrund Bearbeiter transparent mutable Mit dem
244. da class super new field Aktuelle Bearbeiter Fischer define Bisheriger Bearbeiter null define public get Bisheriger Bearbeiter lambda Bisheriger Bearbeiter define public set Bisheriger Bearbeiter lambda Wert set Bisheriger Bearbeiter Wert Jetzt mixen wir beide Aspekte mit unserem Verwahrkonto zur Klasse Of fener Vorgang und erzeugen aus ihr die Instanz OV001 eval gt define Offener Vorgang Bearbeitung mixin Akte mixin Verwahrkonto eval gt define OVOOIl 2 8 KLASSE INSTANZ MODELL 343 new Offener Vorgang id 9 name Erika Musterfrau eval gt send OV001 set Bisheriger Bearbeiter Karl Meyer eval gt send OV001 get Bisheriger Bearbeiter gt Karl Meyer eval gt get field Aktuelle Bearbeiter OV001 gt Fischer eval gt send OV001 get Identifizierung gt 7719 g Das Mixen von solchen Aspekten Teillosungen birgt mannigfalti ge Gefahren weil wir ber die Superclass keine Voraussetzungen formu liert haben Wir k nnten z B mit einer Klasse Foo mixen eval gt define Foo class object super new eval gt define Offener Vorgang Bearbeitung mixin Akte mixin Foo eval gt define OVOOL new Offener Vorgang id 9 name Erika Musterfrau gt ERROR unused initialization arguments id 9 name Erika Musterfrau for instantiated class eval gt define OV001 new Offener Vorgang eval gt send OV001
245. da die 3 elementige Liste um 1 Element l nger ist Generell stellen sich die beiden Kernprobleme f r das Auffinden ei ner Rekursions Route 1 Definition von trivialen L sungen und 2 Definition der Verkn pfung von L sungsschritten 1 3 REKURSION ALS PROBLEMLOSUNGSMETHODE 115 1 Definition von trivialen Losungen Welches ist der einfache Fall bzw welches sind die einfachen Falle bei dem denen die Losung en direkt angebbar ist sind e Woran erkennt man einen einfachen Fall e Wie lautet die zugehorende Losung 2 Definition der Verkn pfung von Losungsschritten Welches ist die Verkn pfung zwischen einem typischen und dem n chst einfacheren Fall e Wie kommt man von einem typischen Fall genau einen Schritt n her zu einem einfachen Fall e Wie konstruiert man die L sung f r den vorliegenden Fall aus der unterstellten L sung f r den einfacheren Fall Beim Fall Laenge lauten die Antworten auf diese Fragen e Der einfache Fall ist gegeben wenn die Liste leer ist d h dasnull Konstrukt liefert den Wert t e Bei der leeren Liste ist die L nge gleich 0 e Verk rze die gegebene Liste um ein Element e Addiere 1 zur L sung der um ein Element verk rzten Liste Entscheidend ist dass die Rekursions Route tats chlich zu trivialen F llen f hrt Anhand eines rekursiven Akronyms soll der umgekehrte in der Regel der ungewollte Weg aufgezeigt werden Man nehme zum Spa an lambda stehe f r folgende
246. dabei gt lambda x print x x eval gt hashtable ref ht 190 KAPITEL 2 KONSTRUKTIONEN Detail lt Frame gt jerungs lt slot gt grad lt facet gt lt value gt Mt Legende BNF Notation lt gt Abschnitt 1 2 2 S 66 lt frame gt Rahmen Name oberste Ebene der Einheit lt slot gt Einschub Name n chste Ebene Komponenten lt facet gt Facetten Name Attribute einer Komponente lt value gt Wert Auspr gungen der Attribute Abbildung 2 11 Rahmen konstruiert aus geschachtelten A Listen b Wenn nicht dabei gt Wenn nicht dabei eval gt hashtable contains ht A gt HE eval gt hashtable contains ht A B C gt f Da eq A B C AB C gt PL eval gt string hash More gt 75413158 eval gt symbol hash A gt 80027 eval gt equal hash A B C gt 629107430 Aus geschachtelten A Listen sind Rahmen engl frames konstruier bar die eine mehrstufige Struktur darstellen Abbildung 2 11 S 190 Mit solchen Rahmen hat Marvin Minsky ein Paradigma zur Abbildung von Wissen vorgeschlagen 128 Ein Rahmen besteht aus Ein sch ben engl slots Die Einsch be haben Facetten engl facets die wiederum Werte haben die voreingestellt sein k nnen Die Werte selbst k nnen weiter strukturiert sein aber auch Funktionen umfassen Wir k nnen z B ein Konto als einen Rahmen definieren Alle Rah men fass
247. das prinzipiell dynamische Listenkonzept Dynamisch ist die Liste in Bezug auf das Ver schieben von Elementen beim Einf gen und L schen von Elementen Sind viele Attribute abzubilden dann ist die einfache Liste kaum ge eignet Ihr dynamisches Konzept erweist sich als nachteilig wenn von den einzelnen Objekten hier Konten nur wenige Attribute einen Wert ungleich dem Ersatzwert haben In einem solchen Fall hat die Liste viele Platzhalter die nur deshalb erforderlich sind um die fest vorgegebene Position der Elemente zu sichern Dadurch wird erstens die Selektions zeit verl ngert und zweitens das Verstehen des Programmes unn tig er schwert 2 2 ABBILDUNGSOPTION LISTE 185 Zumindest bei wenig besetzten Attributen ist es angebracht die Position in einer Liste nicht als Informationstr ger zu nutzen Die In formation um welches Attribut es sich handelt kann dem Element zu geordnet werden wenn die Elemente jetzt selbst Listen sind Eine sol che Verkn pfung des Attributs mit seinem Wert wird als Assoziations liste kurz A Liste bezeichnet Eine A Liste ist eine Liste mit eingebet teten Sublisten in denen das erste Element jeweils die Aufgabe eines Schl sselbegriffs Key bernimmt Hinweis A Liste Allgemein k nnen A Listen als Listen aufgefasst werden deren Elemente Punkt Paare engl dotted pairs sind In unserem Beispiel k nnte das Konto dann folgende Listenstruktur haben Objekt Konto Kontonummer
248. define list ref Liste 1 0 eval list ref Liste i 1 global namespace let namespace let namespace Mit dieser Zwischenstufe bei der Makro Ausf hrung werden die Wer te von ns Foo und leichter nachvollziehbar eval gt ns gt lt namespace 0 gt eval gt Foo gt 10 eval gt Baz gt ERROR reference to an identifier before its definition Baz eval gt eval Foo ns gt 20 eval gt Foo gt 10 eval gt eval Baz ns gt 7 eval gt eval Bar ns gt f Ersatzwert da keiner angegeben wurde Bindet man im Programm 2 8 S 298 das let namespace statt an die Applikation von make base namespace an die Applikation von current namespace erh lt man folgende Ergebnisse eval gt define global namespace current namespace eval gt define Foo 10 eval gt define ns definep Foo 2 Foo Baz 3 4 Bar eval gt Foo gt 20 15In diesem Fall h tte man nat rlich auf die explizite Nennung der Namensr ume ver zichten k nnen da das eval Konstrukt standardm ig im current namespace aus gef hrt wird 300 KAPITEL 2 KONSTRUKTIONEN eval gt Baz gt 7 eval gt Bar gt f 2 5 4 Zusammenfassung Continuation und Makros Die Verknupfung der Funktion mit ihrer Definitionsumgebung Closure Konzept erm glicht problemloses Konstruieren mit Funktionen h herer Ordnung Eine Funktion kann an ihre eigene lambda Variable gebunden wer den Auf diese W
249. den Typ fest Mutatoren ndern existierende Einheiten In dieses pragmatische enge Klassifikations schema integrieren wir auch Vorg nge wie das Zerst ren von Einhei ten Destruktor hier als Mutator klassifiziert oder das Pr sentieren von Einheiten Pr sentator hier als Selektor klassifiziert Der zeitliche Aspekt z B das Aktivieren Terminieren und Suspendie ren von Einheiten ist damit kaum erfassbar Wir decken diesen Aspekt daher durch Graphiken z B Vererbungsgrafen und zus tzliche Erl u terungen ab Gezeigt wurde dass eine strikte begriffliche Trennung in Programm Algorithmus und Daten struktur die Ambivalenz zwischen beiden verdeckt Abschnitt 1 1 3 S 27 Zum Verstehen von LISP Program men erscheint es sinnvoll diese Trennlinie nicht permanent zu betonen Wir sprechen daher im Folgenden weniger von Programm und Daten strukturen sondern von Optionen zur Abbildung von Einheiten 2 1 1 Analyseaspekte Der Zweck einer Analyse bestimmt die Suche nach den bedeutsamen relevanten Konstrukten und ihrem Zerlegungsgrad Dabei ist ein Kon strukt entweder ein bekanntes Konstrukt oder es setzt sich wiederum aus zu analysierenden Konstrukten zusammen Wir unterstellen dass der Leser des Quellcodetextes zumindest die eingebauten LISP Konstruk te erkennt und ihm ihre Wirkung gegebenenfalls durch Nachschlagen im jeweiligen Referenzmanual hinreichend bekannt ist Von den mannigfa
250. den LISP Quellcodetext zu pflegen hat dann ist anzunehmen dass dieser Adressat die eingebau ten primitiven LISP Konstrukte erkennt und versteht Eine Kommentar zeile Hier wird die Datei X ge ffnet nach einem open Konstrukt ist daher unsinnig Sinnvoll w re z B die Erl uterung X ist als Datei ab gebildet damit der maximale Arbeitsspeicherbedarf kleiner als 1 MB bleibt Da das Verst ndnis und der Kenntnisstand des Lesers mit der Be nutzung der Dokumention w chst und sich infolgedessen seine Termi nologie ver ndert w re eine Anpassung der Dokumentation an diese Ver nderung w nschenswert Soweit das Dokument rechnergest tzt ge f hrt wird ist die Einprogrammierung verschieden kundiger Leserklas sen z B Anf nger Ge bter Experte ein blicher Ansatz Anzustreben ist eine Aktivit tsverschiebung An die Stelle eines Dokumentes das ge lesen werden kann tritt ein Dokumentations Programm das den Inhalt zugeschnitten auf den aktuellen Wissenstand des Lesers pr sentiert L sungsansatz ist ein Dialog mit dem Leser der Aufschluss ber sein aktu elles Verst ndnis gibt ohne dabei die Datenschutzaspekte zu missach 376 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN ten Diese dynamische Klassifikation des Lesers wird genutzt um eine Anpassung der anzuzeigenden Formulierungen zu realisieren Wahrend der Adressat Rechner den beherrschten Sprachschatz ein deutig in Form der verarbeiteten Konstrukte und Konstruktionen off
251. der max auf Argumente angewendet Nun wollen wir eigene Funktionen konstruieren Grund lage dazu bildet das 1ambda Konstrukt Es basiert auf dem A Kalk l einem mathematischen Formalismus zur Beschreibung von Funktionen durch Rechenvorschriften Alonzo Church hat f r die Pr zisierung der Berechenbarkeit den Kalk l formuliert 42 zur Evaluierung von A Ausdr cken 113 zum Kalk lverstehen 116 zur Implementation 2 Program miersprachen nach dem Modell des A Kalk ls simulieren die sogenann ten amp und B Reduktionsregeln des Kalk ls mit Hilfe einer Symbol Wert Tabelle Die Simulation nutzt eine Kopierregel wobei an die Stelle der formalen Parameter A Variablen im Original in der Kopie die aktuel len Parameter Argumente gesetzt werden Der griechische Buchsta be A selbst hat keine besondere Bedeutung Alonzo Church hat ihn in Anlehnung an die Notation von A N Whitehead und B Russell benutzt 116 p 357 Zur Eingabe auf alphanumerischen Terminals wird blicherweise das Symbol lambda verwendet Eine selbst definierte Funktion entsteht durch Evaluierung des lam bda Konstruktes eval gt lambda lt schnittstelle gt lt rechenvorschrift gt gt lt procedure gt mit lt schnittstelle gt Sie wird durch einen oder mehrere formale Para meter im Sinne von Platzhalter Variablen f r die Argumente repr sentiert Mehrere Platzhalter wer den als Elemente einer Liste not
252. dge MA 02139 USA Merkmale GC LISP 286 386 ist ein Common LISP f r die PC Welt Mit HA LO steht eine leistungsf hige Graphik Toolbox zur Verf gung Aufgrund des Common LISP Umfanges ist GC LISP wesentlich gr er und zum Teil nicht so schnell wie z B muLISP e Guile http www gnu org software guile guile html Zugriff 22 Jan 2010 Rechnerklasse PC Hersteller Copyright Free Software Foundation Inc 51 Franklin Street Fifth Floor Boston MA 02110 1301 USA Merkmale GNU Guile ist ein Interpreter ftir Scheme e IBUKI Common LISP Kyoto Common LISP Rechnerklasse Workstation Hersteller Ibuki Inc 1447 N Shoreline Blvd Mountain View CA 94043 USA Merkmale Ibuki umfasst keinen vollst ndigen Compiler sondern ein Prepro zessor f r C Compiler Der LISP Code wird in C bersetzt e InterLISP D http en wikipedia org wiki Interlisp Zugriff 22 Jan 2010 Rechnerklasse LISP Maschine Xerox Hersteller Xerox Palo Alto Research Center 3333 Coyote Hill Road Palo Alto California 94304 USA Merkmale Abschnitt A 1 S 460 e Q LISP IQ CLISP Rechnerklasse PC Hersteller Integral Quality Inc PO Box 31970 Seattle WA 98103 0070 USA Merkmale IQ LISP ist ahnlich zu UCI LISP einem Dialekt von MacLISP IQ LISP unterst tzt den 8087 Arithmetikprozessor IQ CLISP ist die Common LISP Version Es verf gt ber ein einfaches Wi
253. die Frage Wie werden die anwendungsspezifischen Daten repr sentiert Im funktions gepr gten Denkrahmen kannten wir zum Zeitpunkt der Operation Adresse Aufkleber weder die L nge des Feldes noch mus ste schon der Wertebereich mit eingebauten bzw bekannten Datenty pen pr zisiert werden Erst mit der Definition von Get Kurztitel sind Angaben ber den Wertebereich entsprechend zu pr zisieren Mit einem Denken in der Kategorie Zugriffskonstrukt verschieben wir eine solche implementationsabh ngige Beschreibung Wir k nnen zun chst davon abstrahieren ob die Daten z B vom Typ String Vector oder Sym bol sind Wir durchdenken und spezifizieren unsere Konstruktion in der Kategorie Zugriffskonstrukte Ausgangspunkt f r die Problemdurchdrin gung ist die Frage Welche anwendungsspezifischen Operationen sind mit Daten notwendig Beide Ans tze sind voneinander abh ngig Immer dann wenn ein Problem wenig durchschaut wird ist ein Wechselspiel zwischen beiden Ans tzen zur Korrektur der ersten L sungsentw rfe erforderlich n derungen der passiven Datenstruktur werden durch nderungen der aktiven Konstrukte Operationen hervorgerufen und umgekehrt Die Definition von Zugriffskonstrukten bildet dabei eine Schnittstelle zwi schen der Implementations und der Verwendungs Perspektive Mit den Zugriffskonstrukten versuchen wir die Implementations Anforderungen Wertebeschreibungen in den Kategorien der eingebauten Konstrukte von den
254. die Kontrollstruktur engl control structure Sie beschreibt ob und in welcher Reihenfolge Programm teil e ausgef hrt werden Man bezeichnet sie korrekterweise auch als Steuerungsstruktur oder auch als Ablaufsteuerung In der Ter minologie imperativ gepragter Programmiersprachen z B COBOL oder Pascal N heres Abschnitt 2 1 S 141 spricht man vom Steuerungs fluss oder Kontrollfluss engl flow of control Kombinierbar sind Konstrukte durch eine Hintereinanderausf hrung Diese Verkettung nennt man im Zusammenhang mit Funktionen Kompo sition In der Mathematik wird die Komposition zweier Funktionen f und g notiert als f g und gelesen als f verkettet mit g oder g eingesetzt in f oder f nach g Diese Komposition ist in LISP als g x zu for mulieren mit f und g als Funktionen die f r ein Argument definiert sind engl unary functions Der Wert dieser Komposition ist der Wert von y wobei y der Wert von g x ist Die Komposition g x 66 KAPITEL 1 KONSTRUKTE ist nur dann sinnvoll d h nicht undefiniert wenn x die Schnittstelle von g und y die Schnittstelle von f erf llen Anders formuliert Die Kompo sition bedingt dass x in der Definionsmenge von g und die Wertemenge von g in der Definitionsmenge von f enthalten sind Beispiele fur die Komposition eval gt define add2 lambda zahl 2 zahl eval gt define mul3 lambda zahl 3 zahl eval gt add2 mul3 1 gt
255. dieser modifizierten TITEL Definition kann man TITEL oder KURZTITEL drucken Als Alternative w re die Definition einer Operati on Kurztitel m glich die im COBOL Programm auf einer MOVE Ope ration assign statement beruhen w rde Im funktions gepr gten Denkrahmen benennen wir fr hzeitig Ope ration Ihr schrittweises durchdenken und spezifizieren f hrt schlie 308 KAPITEL 2 KONSTRUKTIONEN lich ebenfalls zu den abzubildenden passiven Einheiten Daten Wir h tten beispielsweise eine Funktion Adress Aufkleber mit einem Ar gument ADRESSE definiert Beim Konstruieren des Nebeneffektesprint ben tigen wir die Operationen Get Titel undGet Kurztitel Auch jetzt k nnen wir wieder f r Get Kurztitel eine operationale Sicht umsetzten d h in LISP ein lambda Konstrukt w hlen Dieses enth lt die Operationen Get Titel und eine Verk rzungsoperation Diese ist abh ngig vom Typ des Wertes den Get Titel liefert Ist es ein String dann k me zum Verk rzen das substring Konstrukt in Betracht Abschnitt 2 4 2 S 241 Ist es ein Symbol w re ein Explode Konstrukt notwendig Abschnitt 2 4 3 S 248 Im imperativ gepr gten Denkrahmen wurden fr hzeitig die Wertebe reiche der Felder beschrieben Wir haben in den Kategorien wie L nge und primitiven Beschreibungstyp der Wertebereichsspezifikation gedacht Holzschnittartig formuliert Die Speicherplatzkonditionen pr gen diese Denkwelt Ausgangspunkt f r die Problemdurchdringung ist
256. do 1 1 i 1 toa 5 1 display display i gt 2 3 4 56 Input Output Interface define Meine Ausgabe open output file D bonin temp Schrott txt Meine Ausgabe gt lt output port D bonin temp Schrott txt gt write Dies ist Sexpr 1 Meine Ausgabe newline Meine Ausgabe write Dies ist Sexpr 2 Meine Ausgabe close output port Meine Ausgabe print Alles klar gt Alles klar display Alles klar gt Alles klar printf Alles a klar n s docu 474 ANHANG A LISP SYSTEME oder nicht gt Alles doch klar oder nicht n newline a displays next argument s writes the next argument Vorab require scheme pretty pretty print lambda xJ 4 X gt lambda x e J x 7 display 60 Anzahl der Splaten pretty format define 60 gt Einger ckte Ausgabe define Meine Eingabe open input file D bonin temp Schrott txt read Meine Eingabe gt Dies ist Sexpr 1 read Meine Eingabe gt Dies ist Sexpr 2 read Meine Eingabe gt lt eof gt close input port Meine Eingabe call with output file WD bonin temp Schrott txt ex1ists append lambda out display Hello Lisp World out newline out port current input port gt t Vorab require net url define Foo string surl http www hegb de read line get pure port Foo close input p
257. dr Muster cdr Liste Set Match Value Get Match Variable car Muster car Liste t Die Erg nzung C betrifft den Fall dass im Muster das Pr dikat Var iable erf llt ist Im Simple Match ist quasi der Fall formuliert der Symbol abdeckt Statt eq car Muster ist Symbol car Muster zu setzen Die einzelnen Klauseln dieses Symbol Falles sind hier f r den Fall Variable ebenfalls zu formulieren al lerdings sind dann die Wertbindungen zu erg nzen Wir k nnen diese Erg nzung wie folgt definieren Variable car Muster cond Variable deckt ein Element Match cdr Muster cdr Liste Set Match Value Get Match Varaible car Muster list car Liste Variable deckt mehrere Elemente Der bisherige Wert ist zu erg nzen Match Muster cdr Liste Set Match Value Get Match Variable car Muster cons car Liste Get Match Value Get Match Variable car Muster t Variable deckt kein Element Match cdr Muster Liste t Muster passt nicht t Dieses erweiterte Match Konstrukt und seine Hilfsfunktionen wie Pradikate Selektoren Mutatoren sowie das Analyse Literal Atom sind als lokale Funktionen im Konstrukt Mustervergleich definiert Programm S 256 2 4 ABBILDUNGSOPTION ZEICHENKETTE UND SYMBOL 255 Zum Verstehen der Aufgabe sind vorab Anforderungen Annahmen zum Entwurf und Testfalle formuliert Dabei verweist d
258. e Konstruktmerkmal eingebaut selbst definiert normal speziell primitiv komplex problemlos destruktiv global lokal Konstruktor Selektor Pradikat Mutator Steuerung transfer of control Umgebungsoperation im System Kommunikation mit der Umwelt Beispiele bzw Erl uterung CONS Cat edr mulineg gt pair Konto Abbuchen equal Es quote define aye Wee do case letrec eons List append set car set cdr Definiert in USER GLOBAL ENVIRONMENT bzw USER INITIAL ENVIRONMENT do lambda let cons Make Konto car Summe Einzahlun gen nui Zero 2 Konto set Einzahlen Sequenz Selektion Iterati on goto exit Bindung von lokalen Varia blen read print load lambda Tabelle 2 1 Klassifikation f r Konstrukte 2 1 VERSTEHEN EINER KONSTRUKTION 143 ger anspruchsvoll auch von einem Programmier Stil reden wenn wir dabei die jeweils bestimmenden Stilelemente in den Mittelpunkt r cken 176 Allgemein ist ein Paradigma ein von der wissenschaftlichen Fachwelt als Grundlage der weiteren Arbeiten anerkanntes Erkl rungs modell eine forschungsleitende Theorie Unerheblich ist ob das Modell direkt von einem real existierenden Rechner abgearbeitet werden kann oder ob es auf einem fiktiven Rech ner einer angenommenen Maschine basiert Im letzteren Fall l sst sich der Konstrukteur nicht davon leiten wie die Umsetzung seines Modells auf einen verf gbaren Rec
259. e x 2 7 x 8 x 8 colorize filled rectangle x 4 x 4 red pin over circle x x 4 x 4 colorize filled rectangle x 2 x 2 red next let x 100 hc append x 2 pin over circle x 2 x 8 x 8 colorize filled rectangle x 4 x 4 red pin over circle x x 4 x 4 colorize filled rectangle x 2 x 2 red slide title myTitle item Wunsch von code list Hinrich E G Bonin quote V erfasser next para Tsch und viel Freude mit tausenden von Klammern Ende module Ende LISP Slideshow 444 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Pladoyer fur LISt Processing Slide 7 21 Januar 2010 10 22 HE e Grafikbeispiel let x 100 hc append x 2 pin over circle x 2 x 8 x 8 colorize filled rectangle x 4 x 4 red pin over circle x x 4 x 4 colorize filled rectangle x 2 x 2 red on Legende Beispiel Verwahrkonto S 337 LISP Slideshow Konstrukt S 440 Abbildung 3 10 LISP Slideshow Slide 7 eval gt require LISP Slideshow gt lt gt Abbildung 3 10 S 444 3 4 2 Zusammenfassung Slideshow Mit der in PLT Scheme gezeigten Option eine Slideshow zu programmie ren wird deutlich das LISP in allen Phasen des Lebenszyklus einer Soft ware Abbildung 1 13 S 51 vorteilhaft eing
260. e nerischen Funktion Gattungsfunkti on Generische Funktion Methode Abbildung 2 22 CLOS Bausteine Objekttypen Offset Evolution Auf der top level Ebene importieren wir den Modul und wenden das Konstrukt Evolution wie folgt an require HEGB Selbstreplikation Evolution gt ddy junmmmotiukyceeal collects HEGB Selbstreplikation ss 22 33 Ende 2 8 Klasse Instanz Modell Die Realisierung von Klasse Instanz Modellen hat in LISP eine lange Tra dition Als charakteristische Vertreter gelten die beiden Systeme Com mon LOOPS und Flavors e Common LOOPS Common LISP Object Oriented Programming Sys tem 19 Common LOOPS implementiert in Common LISP realisiert die Ob jekt Orientierung mit generischen Funktionen so dass normale LISP Funktionen und Methoden syntaktisch einheitlich gehandhabt werden k nnen Meta Objekte sind eine charakteristische Common LOOPS Eigenschaft e New Flavors 131 188 328 KAPITEL 2 KONSTRUKTIONEN Common Generische Funktionen LISP a Multiple Vererbung Object Deklarative Methodenkombination System Meta Objekt Protokoll Abbildung 2 23 CLOS Bausteine Charakteristika Das Flavor System wurde ursprtinglich fiir die LISP Maschine ent wickelt Abschnitt A S 457 Im Mittelpunkt steht ein Mixen von Teilkomponenten durch multiple Vererbung Dieser mixin sty le begr ndet den au ergew hnlichen Namen Flavor Durch das
261. e Ausgabe von end auch an des Ende zu setzen wird ein Thread mit dem sleep Konstrukt zum Warten veranlasst eval gt void sleep lt secs gt gt t mit lt secs gt Thread wartet die nicht negative Angabe von Se kunden Mit dem break thread Konstrukt unterbrechen wir die Abarbei tung des jeweiligen Threads Das current thread Konstrukt hat den aktuellen Thread als Wert eval gt current thread gt lt thread handler gt eval gt define Alphabet with Threads lambda thread lambda Upcase Alphabet thread lambda Downcase Alphabet sleep 001 break thread current thread end eval gt Alphabet with Threads gt abcdefghijklmn op A user break BCDgqrstuvwxyz EFGHIJUKLMNOPORSTUVWXYZ eval gt Alphabet with Threads gt 358 KAPITEL 2 KONSTRUKTIONEN abcdefghijklmnopgrstuvwxyz ABCDEFGH IUKLMNOPORSTUVWXYZ user break Das obige Ergebnis zeigt dass die Unterbrechung f r den Haupt Thread die Ausgabe von end verhindert Zum Nachweis dass die beiden Buchstabenausgabe Threads gleichbehandelt werden definieren wir wie folgt Konstrukt Alphabet with Threads eval gt define Alphabet with Threads lambda letrec Upcase Alphabet lambda do 1 65 i 1 gt 1 90 newline display integer gt char 1 sleep 0 1 Downcase Alphabet lambda do i 97 i 1 gt i 122 newline display integer gt char 1 sleep 0
262. e Notation nach der polnischen Logikerschule um Jan Zukasiewicz be nannt bezieht sich in LISP auf alle Operationen Arithmetische Funk tionen wie Addition Subtraktion Multiplikation oder Division haben damit eine gegen ber der Schulmathematik ungewohnte Schreibweise Die Pr fix Notation gew hrleistet eine einheitliche Syntax unabh ngig von der Zahl der Argumente Die Operation steht stets an erster Stelle in einer Liste Beispiele zur EVAL Regel 2 lt gt Abbildung 1 6 S 24 eyal gt 1111171111117111111111711111 217111711112 71111111211171111 222222222 222222 222222 22222222222222222222222 22222222 ERREeERE LIEDER ER EEE ERLEE EEK ER 3333333333333333 33333333 gt 82304526748971193415637860082304526748971193390946502 05761316872427983539094650205761316872674897119341563 786008230452674897119341563786 eval gt sin 0 gt 0 eval gt cos 0 5 gt 0 8775825618903728 Die Argumente lt arg gt lt arg gt k nnen Listen sein und damit ebenfalls dem Konstrukttyp lt funktion gt lt arg gt lt arg gt entspre chen so dass auch f r sie die EVAL Regel 2 anzuwenden ist eval gt 1 1 3 1 gt 6 eval gt max 0 4 0 6 2 34 1 gt 3 34 eval gt 11 1 1 1 gt 1 e EVAL Regel 3 Evaluieren einer Liste des Typs lt spezielles symbol gt lt arg gt lt arg gt Ist der symbolische Ausdruck eine Liste des Typs lt spezielles symbol gt lt a
263. e die wieder selbst Li sten als Elemente enth lt dann sind die rekursiv definierten Teilproblem 132 KAPITEL 1 KONSTRUKTE L sungen miteinander zu verkn pfen Daf r bieten sich die Konstrukto ren cons und append an Ein Beispiel ist die folgende Funktion Turn Sie kehrt die Reihenfolge der Elemente einer Liste um wobei auch die Elemente in den Sublisten umgedreht werden eval gt define Turn lambda Liste cond null Liste null not pair car Liste append Turn cdr Liste cons car Liste nurl t append Turn cdr Liste cons Turn car Liste null eval gt Turn A B C D E gt E DC BA Die Definition lokaler rekursiver Funktionen erm glicht das letrec Konstrukt Im Gegensatz zum let Konstrukt das erst die Werte f r alle lokalen Variablen ermittelt und dann mit diesen in der Umgebung Asso ziationen aufbaut vermerkt das letrec Konstrukt zun chst die lokale Variable in der Umgebung und ermittelt dann ihren Wert eval gt letrec Foo lambda 1 cond null 1 null car 1 0 cons Undefiniert Foo cdr 1 t cons 1 car 1 Foo edr 1133771 Foo 2042 0 1 gt 1 2 Undefiniert 1 4 Undefiniert 1 Charakteristische Beispiele fur Abschnitt 1 3 Beispiele member und union eval gt define member lambda Element Liste cond null Liste f equal Element car Liste Liste t member Element cdr Liste eval gt
264. e 1 15 S 83 Bedingungen und Aktionen innerhalb des ET Konstruktes als lokale Konstanten definiert Tabelle 1 18 Programm ET Auszahlung buchen lokale Konstan ten 108 KAPITEL 1 KONSTRUKTE Notierte Konstrukte eval gt define MURKS 1 lambda Zahl Zahl 2 gt ERROR Zu viele symbolische Ausdr cke f r das define Konstrukt da die Klammern f r das lambda Konstrukt fehlen eval gt define MURKS 2 lambda Zahl 2 gt ERROR Die Angabe der lambda Variablen fehlt Daher hat das lambda Konstrukt zu wenige symbolische Ausdr cke eval gt define MURKS 3 Zahl 2 gt ERROR Syntaktische Kurzform des define Kon struktes erwartet an der Stelle von Zahl 2 das Symbol Zahl Das Symbol Zahl fehlt und eine schlie ende Klammer steht an der falschen Stelle eval gt define MURKS 4 lambda Zahl Zahl 2 gt ERROR Zu viele symbolische Ausdr cke fur das define Konstrukt da das lambda Kon strukt schon geschlossen wurde bevor der Funktionsk rper notiert ist eval gt define MURKS 5 lambda Zahl Zahl 2 gt ERROR Zu wenige symbolische Ausdr cke f r das lambda Konstrukt Da das define Kon strukt schon beendet wird bevor Zahl 2 gelesen wird fehlt dem lambda Konstrukt der Funktionsk rper eval gt define MURKS 6 lambda 1 Zahl 2 gt ERROR Ein Zahlatom hier 1 ist keine g ltige Variable Zu beachten ist der Unterschied
265. e Befassung mit dem Fixpunktoperator Y zwingt zum funktionalen Denken wie der vorherstehende Satz offensichtlich demonstriert Zum Verstehen des Fixpunktoperators entwicklen wir schrittweise ei ne Y Definition 68 Dazu nutzen wir die drei berlegungen 1 Einf hrung einer zus tzlichen lambda Variablen zur Vermeidung von rekursiven Konstrukten wie letrec oder define 2 Konvertierung einer Funktion mit mehreren lambda Variablen in geschachtelte Funktionen mit einer 1ambda Variablen Curryfizie rung Ziel ist die Manipulation der neuen lambda Variablen f r den Selbstbezug von der Manipulation der bisherigen Lambda Variablen zu trennen 3 Definition gleichwertiger Funktionen durch Analyse eines Konstruk tes Abstraktion Zum Wieder Einfinden in die funktionale Denkwelt betrachten wir zu n chst die folgende einfache Funktion Foo Sie hat eine Funktion als R ckgabewert eval gt define Foo lambda n lambda m display Wert von n display n 280 KAPITEL 2 KONSTRUKTIONEN newline display Wert von m display m newline 20 eval gt Foo 2 3 gt Wert von n 2 Wert von m 3 6 Wenden wir uns nun der Definition der Funktion Summe zu und nen nen sie f r die folgende Er rterung vor bergehend lt summe gt letrec lt summe gt lambda Liste cond null Liste 0 number car Liste car Liste Summe cdr Liste t Summe cdr Liste lt sum
266. e Einschatzung in Informatik Spektrum Band 25 Heft 1 Februar 2002 S 3 11 William H Burge Recursive Programming Techniques Reading Massachusetts u a Addison Wesley 1975 R M Burstall D B MacQueen D T Sannells HOPE An Experimental App licative Language LISP Conference Stanford Redwood Est 1980 pp 136 143 Firma Calculemus Comments on TLC LISP 86 Version 1 51 July 1986 James Allen Carte Filtering Typographic Noise from Technical Literature in Technical Communication Third Quarter Vol 20 pp 12 13 1973 auch er schienen in Harkins Plung Eds A Guide for Writing Better Technical Papers New York IEEE Press selected reprint series 1981 pp 154 155 Eugene Charniak Christopher K Riesbeck Drew V McDermott James R Meehan Artificial Intelligence Programming Second Edition Hillsdale New Jersey Hove and London Lawrence Erlbaum Associates 1987 Douglas W Clark C Cordell Green An Empirical Study of List Structure in Lisp Communications of ACM Vol 20 No 2 February 1977 pp 78 87 Volker Claus Total unstrukturierte Programme in Der GMD Spiegel 4 87 Ge sellschaft f r Mathematik und Datenverarbeitung mbH St Augustin S 46 50 William Clinger Semantics of Scheme in Byte Febraury 1988 pp 221 227 W E Clocksin C S Mellish Programming in Prolog Berlin New York u a Springer Verlag Third Edition 1987 Common LISP Object System 1988 20 Al
267. e Element das Symbol dessen Eigenschaft MATCH VALUE den abgedeckten Wert auf nimmt Liegt keine Mustervariable vor sondern nur ein Fragezeichen bzw ein Stern dann ist das zweite Element null eval gt Analyse Literal Atom Programm bedingt X und Y gt Programm bedingt 2 und Mit der Annahme dass das Eingabe Muster eine Liste ist deren Ele mente alle Symbole sind k nnen wir das Transformations Konstrukt wie folgt definieren eval gt define Analyse Literal Atom lambda Liste cond nuli Liste list symbol car Liste let Alle Zeichen Explode car Liste Match Typ car Alle Zeichen Match Variable cond null cdr Alle Zeichen list t Implode 252 KAPITEL 2 KONSTRUKTIONEN cdr Alle Zeichen cond eq Match Typ cons list 7 Match Variable Analyse Literal Atom cdr Liste eq Match Typ cons list 7 Match Variable Analyse Literal Atom cdr Liste t cons car Liste Analyse Literal Atom cdr Liste t display Nicht implementiert display car liste Auf der Basis dieser Eingabe Transformation sind Pradikate zu defi nieren die erkennen ob ein Deckelement bzw eine bestimmte Muster variable vorliegt Wir definieren z B f r den Stern bzw f r die Muster variable deren PRINT Name mit einem Stern beginnt folgende Pradika te eval gt define Symbol lambda Liste
268. e Konstrukte dem Benutzer direkt bereitstellt ist ihre Imple mentation eine zweitrangige Frage Bedeutsam sind f r uns ihre Lei stungskriterien Anwortzeit und Speicherplatz Bedarf Eine Darstellung des eigentlichen Programmcodes der zur Anwendung kommt hilft sel ten Wir interessieren uns nicht f r eine externe maschinenabh ngige Repr sentation des Programmcodes wohlm glich in Form von hexade zimalen Zahlen Wesentlich ist die Abstraktion in Form des Symbols das 1 1 EINFUHRUNG HANDHABUNG VON KONSTRUKTEN 39 auf den Programmcode verweist Abbildung 1 11 S 34 Beispiels weise interessiert uns bei der Additionsfunktion die Abstraktion in Form des Symbols verbunden mit Angaben zur Schnittstelle hier beliebig viele numerische Argumente zum R ckgabe Wert hier eine Zahl und zur Frage von Nebeneffekten hier keine Soll ein selbst definiertes Konstrukt wie ein eingebautes Konstrukt benutzbar sein dann ist es vorab zu implementieren Implementation bedeutet hier Es ist zu entscheiden aus welchen dem LISP System be kannten Konstrukten es zusammensetzbar ist Unser Konstrukt besteht aus symbolischen Ausdr cken auf die das LISP System die EVAL Regeln erfolgreich anwenden kann F r die Einf hrung fassen wir nochmals zu sammen Definition Konstrukt Ein Konstrukt Baustein ist ein symbolischer Ausdruck konzipiert f r die Anwendung der EVAL Regeln Sein Einsatz setzt Informationen vor aus ber
269. e Lambda Variablen reserviert Option Gro Kleinschreibung Eine Strukturierung sollte aufgrund der Gro Kleinschreibung erfolgen Dabei nutzen wir dann den Vorteil dass Geschriebenes in Kleinbuch staben um 20 50 Prozent schneller als in Gro buchstaben gelesen wird untersucht von Stuart Stuart Gardner 1955 zitiert nach 35 Wesentliche Ursache ist die Wellenform der oberen und unteren Linie bei W rtern mit Kleinbuchstaben z B Der neue Weg statt DER NEUE WEG Die Gro Kleinschreibung sollte heute stets genutzt werden L sung H e Alle Zeichen mit Fluchtsymbol zur Namensstrukturierung eval gt define Selektion Firma Kurzname lambda Liste Ersatz String 3Die urspr nglichen LISP Systeme konnten nur mit Gro buchstaben arbeiten und kon vertierten daher in der READ Phase Kleinbuchstaben in Gro e lt gt Abschnitt 2 4 3 S 248 388 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN cond length Liste 1 cond length Ersatz String 1 list ref Ersatz String 0 t UNBEKANNTER KURZNAMBE t list ref Liste 1 eval gt Selektion Firma Kurzname Kunde 2 gt SIE Mit dem miihsam notierten Fluchtsymbol kann man Leerzeichen zum Strukturieren des Namens verwenden Ein Name k nnte somit ein gan zer Satz sein oder auch nur eine Zahl eval gt define Die Reppenstedter Modewelt ist unbedeutend Firmen Name Make Mode GmbH MoG eval gt Die Reppenstedter Modewelt ist un
270. e gezeigt Ist der auszuwertende symbolische Ausdruck eine Liste dann definiert das erste Element ob die restlichen Listenelemente Argumente evaluiert werden oder nicht Die restlichen Listenelemente k nnen als Eingabe aufgefasst werden Sie sind Eingabe input f r die Funktion die durch das erste Listenelement benannt wird Entsprechen des gilt wenn das erste Element einen speziellen Fall benennt EVAL Regel 3 Die Eingabeschnittstelle zum Programmcode eines Konstruktes das angewendet wird bestimmt die Zul ssigkeit eines Argumentes So muss die Anzahl der angegebenen Argumente der jeweiligen Schnittstellen definition gen gen Zus tzlich muss der Typ eines Arguments passen Arithmetische Funktionen fordern z B numerische Argumente also sym bolische Ausdr cke vom Typ Zahl bzw Ausdr cke die zum Typ Zahl evaluieren Allgemein formuliert Die Argumente m ssen konsistent zur Schnittstelle sein Beispiele zur Anzahl und zum Typ von Argumenten eval gt if Antwort gestern heute morgen gt ERROR Zu viele Argumente eval gt define gt ERROR Zu wenige Argumente eval gt define Otto Witzig Hudelig gt ERROR Zu viele Argumente eval gt define Meyer AG Saldo ist EUR 123 45 gt ERROR Wertassoziation verlangt ein Symbol eval gt define Meyer AG Saldo ist EUR 123 45 eval gt Meyer AG gt Saldo ist EUR 123 45 Zeigt den Wert der vorhergehenden define Anwendung
271. e mit fremden Konstrukten zu kom binieren Solches Handhaben von Konstrukten im Sinne eines Pro bleml sungsvorganges ist nicht isoliert betrachtbar und bewertbar Ob eine L sung Konstruktion zweckm ig ist oder nicht zeigt sich nicht nur in Bezug zur spezifizierten Aufgabe die es gilt m glichst kor rekt abzubilden Zus tzlich soll die Konstruktion leicht an eine ge nderte Situation anpassbar sein Die zu erreichende Software Qualit t bezieht sich auf die Gesamtheit von Eigenschaften und Merkmalen auf die Ge brauchstauglichkeit funktionale Qualit t die Entwicklungsf higkeit und die bertragbarkeit realisierungstechnische Qualit t Das Einbeziehen der Anforderungen des gesamten Software Lebens zyklusses ist zwingend erforderlich N heres Abschnitt 3 2 S 403 Die Bewertung einer Konstruktion umfasst alle Phasen z B Problem analyse Anforderungsdefinition Konzeptionierung logischer Entwurf Detailentwurf Programmierung Testen Implementation Betrieb und Wartung Pflege Fortentwicklung Abbildung 1 13 S 51 Sie wirft unterschiedlichste Fragen auf konomische gesellschaftliche soziale organisatorische juristische und viele mehr Unsere Thematik Konstruktion zielt auf die software technischen Fra gen Wir konzentrieren uns auf die Probleme die man blicherweise Software Ingenieuren zur L sung bertr gt Viele relevante Konstruk tionsaspekte wie z B die Sozialvertr glichkeit werden nicht d
272. e vorliegt Bei vielen ffnenden und schlie enden Klammern ist nicht gleich berschaubar welche Li ste durch welche beiden Klammern begrenzt wird Nicht zuletzt dar auf beruht die sp ttische Uminterpretation des Akronyms LISP in Lots of Insidious Silly Parentheses Das folgende Beispiel verdeutlicht das Pro blem bei vielen Klammern HIER SIND VIELE SCHOENE KLAMMERN ZU ZAEHLEN Moderne LISP Systeme entsch rfen dieses Problem der Klammernzu ordnung durch integrierte Struktureditoren die zu einer schlie enden Klammer die zugeh rende ffnende Klammer hervorheben z B durch Aufblinkenlassen dieser Klammer Da beim Analysieren von LISP Texten nicht immer eine entsprechende Rechnerunterst tzung verf gbar ist m s sen die Klammern manchmal auch manuell gez hlt werden Es gibt verschiedene Empfehlungen f r das Vorgehen beim Z hlen von Klam mern lt gt 166 S 214 ff Die Tabelle 1 2 S 19 skizziert ein Verfahren mit Angabe der Schachtelungstiefe von Listen in Listen Dieses Verfahren auf das obige Beispiel angewendet ergibt folgende Schachtelungstiefen 1 1 EINFUHRUNG HANDHABUNG VON KONSTRUKTEN 19 LISTENERKENNUNG Schritte Aktion Erste Zeichen pr fen Ist es eine ffnende Klammer dann setze ihre SCHACHTELUNGSTIEFE auf 1 andernfalls beende LISTENERKENNUNG denn es ist keine Liste Klammern markieren Suche zeichenweise nach Klammern beginnend vom ersten Zeichen bis zum letzten Z
273. e weite res rekonstruierbar Ein paar S tze zur Warum Darstellung sind daher oftmals hilfreicher als ausf hrliche Erl uterungen zum Wie Wegen der Nicht Rekonstruierbarkeit besteht eine besondere Pflicht das Warum ex plizit zu notieren Zweck Ausrichtung Ein Dokument ist auf die Zwecke auszurichten die es erf llen soll Glie derung Inhalt und Gestaltung Layout des Dokuments sind zweckori entiert zu erarbeiten Ein Pflichtenheft als eine Vertragsgrundlage zwi schen Auftraggeber und Softwarekonstrukteur wird so gestaltet dass Inhalts nderungen nur ber schriftliche Zusatzvereinbarungen m glich sind d h z B gebundene Seiten mit durchlaufender Seitennummerie rung gem Seite i von n Seiten Ein Benutzerhandbuch ist stattdessen eine Loseblattsammlung um Erg nzungen und Korrekturen an den rich tigen Platz durch Austausch der Seiten aufnehmen zu k nnen Ein Formulierungskonflikt besteht zwischen der Zweckausrichtung und dem Baukasten Konstruktionsprinzip Mehrfachverwendbarkeit Die Aussagen sind so zu formulieren dass eine Mehrfachverwendung 3 1 TRANSPARENZ DER DOKUMENTATION 371 einzelner Passagen und oder ganzer Teil Abschnitte in anderen Do kumenten m glich ist Beispielsweise sollen Textpassagen des Pflichten heftes auch f r Vertriebs und Einf hrungs Dokumente verwendbar sein Diese Forderung nach Mehrfachverwendung verlangt m glichst kontext unabh ngig zu formulieren Die Zweckausrichtung f hrt jedoch zu
274. eferant operand set Lieferanten Anzahl 1 Lieferanten Anzahl print Bearbeite Lieferant t print Weder Kunde noch Lieferant eval gt Z hlung Schulze GmbH gt Bearbeite Lieferant Tabelle 1 13 Programmfragment Sequenz mit begin Konstrukt 80 KAPITEL 1 KONSTRUKTE cons object STACK Durchgef hrt eval gt define pop lambda begin0 car STACK set STACK cdr STACK eval gt push Meyer AG gt Durchgef hrt eval gt pop gt Meyer AG eval gt pop gt Mueller OHG Wird beim begin Konstrukt eine Sequenz von symbolischen Aus dr cken notiert die keine Nebeneffekte bewirken dann ist nur die Aus wertung des letzten symbolischen Ausdruckes notwendig Die Auswer tung aller vorhergehenden Ausdr cke ist einsparbar Bei effizienten LISP Implementationen wird diese Optimierungsm glichkeit genutzt eval gt define STACK Mueller OHG Schulze GmbH Otto KG eval gt begin cdr STACK cdr cdr STACK cdr cdr cdr STACK gt Dieses begin Beispiel lasst sich auf den folgenden Ausdruck opti mieren eval gt cdr cdr cdr STACK A Selektion Umfasst ein Modul zwei oder mehr Teile von denen im Anwendungs fall nur ein Teil zutrifft dann ist eine Selektion Auswahl abzubilden Die Abbildung 1 17 S 81 zeigt f r den symbolischen Ausdruck Gesamt eine Selektion in Jackson Notation 98 Sein Wert ergibt s
275. efine eval false gensym zero Sie durchschauen das Wurzelwerk von LISP Die funktionale Wurzel mit ihrem nicht destruktiven Binden Stichwort Re kursion und die imperative Wurzel mit ihrem destruktiven Zuweisen Stichwort set Beide zusammen f hren zur objekt gepr gten Kon struktion mit Klassen Instanzen Nachrichtenaustausch und vielf ltigen 456 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Vererbungsmechanismen Sie wissen wie Konstruktionsaufgaben LISP gepragt zu spezifizieren und transparent zu dokumentieren sind Was konnen wir in Zukunft von LISP erwarten Oder LISPisch formu liert Wie sieht call cc f r LISP selbst aus Unstrittig werden Kon zepte und Leistungen aus anderen Programmiersprachen kontinuierlich integriert Dabei wird eine vermehrte Ausrichtung auf das mobile Com puting wahrscheinlich bedeutsam sein Sicherlich ist LISP mit seinen vielfaltigen Dialekten die erste Wahl wenn es um die Umsetzung von innovativen Ideen auf einer neuen Theo riebasis im Bereich der Softwareentwicklung geht Zusatzliche Konstruk te innovative Konstruktionen und niitzlichere Konstruktionsempfehlun gen konnen wir erwarten Vergleiche ich die praktisch erprobten Mog lichkeiten Anfang der 90iger Jahre mit den heutigen so war zuminde stens damals ein leistungsfahiger Web Server in LISP nicht verftigbar Wir konnen auf die Entwicklung von LISP daher auch in Zukunft sehr gespannt sein Das Buch ist sicherlich wie viele andere im Fa
276. efinieren dass jeder Vektor mit den beiden Elementen 0 ein V NULL repr sentiert Das V null Pr dikat st tzt sich damit auf den Vergleich der Elemente eval gt define V null lambda V Pair and vector V_Pair vector length V Pair 2 eq vector ref V Pair 0 0 eq vector ref V Pair 1 0 eval gt V null V NULL gt t eval gt V null AB gt f 220 KAPITEL 2 KONSTRUKTIONEN Wir unterstellen jedoch dass es nur ein Objekt gibt das V NULL repr sentiert Das Pr dikat V null testet daher auf Identit t und nicht auf Gleichheit von Strukturen Abschnitt 1 2 1 S 52 Das V null Konstrukt nutzt daher f r den direkten Vektor Vergleich das eq Kon strukt eval gt define V null lambda Objekt eq Objekt V NULL eval gt V null V NULL gt t eval gt V null 0 0 gt f Der Konstruktor cons generiert eine neue cons Zelle um den car Teil mit dem cdr Teil zu verkn pfen Diese Verkn pfung realisieren wir durch das Konstruieren eines zweielementigen Vektors eval gt define V cons lambda car Teil cdr Teil vyeeLor car Teil cdr Teil Die Selektoren V car und V cdr realisieren wir dann mit dem Se lektor vector ref eval gt define V car lambda V_ Pair vect r rer V Pair D eval gt define V cdr lambda V Pair vector ref V Pair 1 Das erforderliche Pradikat V pair nutzt das eingebaute Pradikat vector Das V pair Konstrukt
277. eichen und notiere die SCHACHTELUNGSTIEFE nach folgender Vor schrift 1 Jede ffnende Klammer erh lt eine um 1 h here SCHACHTELUNGSTIEFE wenn die zuletzt markierte Klammer Vorg ngerklammer eine ffnende Klammer ist andernfalls erh lt sie die SCHACHTELUNGSTIEFE der Vorg ngerklammer Jede schlie ende Klammer erh lt eine um 1 kleinere SCHACHTELUNGSTIEFE wenn die zuletzt markierte Klammer Vorg ngerklammer eine schlie ende Klammer ist andernfalls erh lt sie die SCHACHTELUNGSTIEFE der Vorg ngerklammer Ergebnis feststellen Hat eine schlie ende Klammer die SCHACHTELUNGSTIEFE lt 1 dann liegt keine ordnungsgem e Liste vor Es fehlen ffnende Klammern Hat eine schlie ende Klammer die SCHACHTELUNGSTIEFE 1 dann markiert diese das Ende einer Liste Haben nur die erste und letzte Klammer die SCHACHTELUNGSTIEFE und ist diese sonst gt 1 dann bilden alle Klammern eine Liste Tabelle 1 2 Verfahren zum Erkennen der Schachtelungstiefe bei Listen HIER SIND VIELE SCHOENE 12 3 4 4 4 43 2 KLAMMERN ZU ZAEHLEN 2 3 3 3 4 5 5 4334 A 3 2 4 Ergebnis des Verfahrens Es liegt eine ordnungsgem e Liste vor Die zun chst ungewohnte Vielzahl von Klammern zeigt nach kurzer Eingew hnungszeit ihre Vorteile Wir sparen damit das Schreiben vieler Begin End oder do od Paare Auch das Problem der Reichweite bei der Schachtelung von Alternativen das sogenannte baume
278. ein Anfangsbaum hier LEERER BAUM In diesen leeren Baum werden zun chst Aktenzeichen d h neue Knoten eingef gt Beim Einf gen ist zu berpr fen ob weiterhin das Kriterium der Ausgeglichenheit gegeben ist Liegt die Ausgeglichen heit nicht mehr vor dann ist abh ngig vom Baumzustand eine Rotati on vorzunehmen Bei der Rotation ist der jeweilige Wurzelknoten neu zu ermitteln Die bisherigen Teilb ume sind umzuh ngen so dass der linke Ast stets zu den kleineren Key Werten und der rechte Ast zu den gr eren Key Werten f hrt Bei dieser Rotation sind vier F lle zu un terscheiden Abbildungen 2 15 S 224 bis 2 18 S 225 Das Einf gen eines Knotens ist als Konstruieren eines neuen AVL Baums implementiert und nicht mit Hilfe des Mutators vector set Der Grund ist hier das leichtere Verstehen des Beispielprogramms Das Konstrukt Aktenverwaltung nutzt die M glichkeit eine Lamb da Schnittstelle Abschnitt 1 1 4 S 32 f r eine unbestimmte Anzahl von Argumenten zu definieren eval gt define Aktenverwaltung lambda Operation Parameter Schnittstelle Funktionsk rper 12 Adelson Velskii Landis 1962 zitiert nach gt 191 S 244 224 KAPITEL 2 KONSTRUKTIONEN Fall 1 Linker Teilbaum gt neue Wurzel einfache Rotation Vor der Rotation Nach der Rotation Balance f r L 2 Balance f r A H Y G 0 f r G D 1 fur D 1 fur A H Y 0 L G m m G Y D L D H A H Y m Legende Notation Abbildung
279. eindeutig vollstandig verifizierbar konsistent modifizierbar zur ckf hrbar traceable und handhabbar Tabelle 3 5 Anzustrebende Eigenschaften f r eine Dokumentation in anderen dominieren Sp testens in der Wartungs und Pflegephase herrscht das Lesen als Suchprozess vor ber Verzeichnisse und Quer verweise wird mehr oder weniger diagonal gelesen um z B Fehler zu isolieren oder versteckte Abh ngigkeiten aufzudecken Daher ist es sinnvoll von Anfang an das Suchen in einer Dokumen tation zu unterst tzen Vorw rts und R ckw rtsverweise sind deshalb Bestandteil einer guten Dokumentation Tabelle 3 5 S 394 nennt die anzustrebenden Eigenschaften f r eine Dokumentation z B 6 Die Eigenschaft Eindeutigkeit bedingt dass wir mehrdeutige Begrif fe vermeiden oder zumindest ihre angenommene Bedeutung in einem Begriffslexikon Glossary hinterlegen Die Eigenschaft Vollst ndigkeit ist adressaten und zweckausgerichtet zu erf llen Ist der Adressat der Rech ner dann ist Vollst ndigkeit in der Praxis n chtr glich objektiv fest stellbar In allen anderen F llen ist subjektiv zu entscheiden ob etwas explizit zu beschreiben ist oder nicht Die Eigenschaften Verifizierbar keit und Konsistenz Widerspruchsfreiheit sind soweit es sich um ver bale nicht streng formaliserte Texte handelt nicht exakt definierbar und kaum erreichbar Sie bilden jedoch schon intuitiv einen Ma stab der zur Pr zision und
280. eine Liste ist Fur unsere Thematik Konstruktion ist die Zusicherung entschei dend Was ein Konstruktor zusammenf gt ist ohne Verlust durch kor respondierende Selektoren zerlegbar d h wiedergewinnbar eval gt car cons Bauteil 1 Bauteil 2 gt Bauteil 1 eval gt cdr cons Bauteil 1 Bauteil 2 gt Bauteil 2 Die Definition von eigenen Konstruktoren und passenden Selektoren vertiefen wir im Abschnitt 2 1 S 141 Pradikate eq Konstrukt und equal Konstrukt Wenn zwei symbolische Ausdrticke miteinander verglichen werden dann sind drei Falle zu unterscheiden 1 Identitat Beide Angaben bezeichnen dasselbe Objekt 2 Gleichheit Beide Angaben haben den gleichen Wert Es sind aber prinzipiell zwei Abbildungen der Objekte Werte feststellbar d h die Wer te sind an zwei verschiedenen Stellen gespeichert Merkformel Zwillinge 60 KAPITEL 1 KONSTRUKTE Punkt Paar Struktur A B Nil C Nil o o o o o nit A C O nil B Legende Care coe cons Zelle Part Part o gt Zeiger Adresse nil Zeiger entspricht o gt nil Abbildung 1 15 cons Zellen Darstellung der Liste A B C 3 Ungleichheit Die Gleichheit stellen wir haufig im Hinblick auf eine Austauschbar keit fest Zweck ist es Gleiches durch Gleiches zu ersetzen Beispielsweise wollen wir den symbolischen Ausdruck 1 2 durch die Zahl 3 er setzen
281. eine Zeichenkette selbst zu definieren Wir nennen sie car string und cdr string Dazu betrachten wir das Zeichen Zwischen raum allgemein auch Space oder Blank genannt als Trennzeichen fir die Zeichenteilketten Der Zwischenraum als einzelnes Zeichen engl character hat die Repr sentation space Ob eine Zeichenkette vor liegt stellt das Pr dikat string fest ob ein einzelnes Zeichen vor liegt das Pr dikat char Ein Zeichen einer Zeichenkette selektiert das string ref Konstrukt Es ist wie folgt definiert eval gt string ref lt string gt lt position gt gt lt character gt mit lt string gt Eine Zeichenkette lt position gt Eine ganzzahlige nicht negative Angabe der Po sition des zu selektierenden Zeichens Die Z hlung der Position beginnt bei 0 Bedingung ist and lt 0 lt position gt lt lt position gt string length lt string gt lt character gt Das selektierte Zeichen der Zeichenkette Ach tung Es ist vom Typ Zeichen engl character nicht vom Typ Zeichenkette engl string dazu die folgenden Beispiele eval gt define Foo Requirements Engineering eval gt string length Foo gt 24 eval gt string ref Foo 3 gt u eval gt string ref Foo 24 gt ERROR string ref index 24 out of range 0 23 eval gt string ref Foo 23 gt g eval gt string ref Foo 12 gt space eval gt string Foo gt t eval gt string
282. eise entstehen selbstbeztigliche Funktionen ohne de fine oder letrec Konstrukt Das call cc Konstrukt bindet an die 1ambda Variable seiner appli zierten Funktion die noch nicht vollzogene Abarbeitung als sogenann te Continuation Fortsetzung Da eine Continuation die vollzogenen Bindungen mit umfasst konnen Berechnungen abgebrochen und spater auch mehrfach wieder aufgenommen werden Das call cc Konstrukt ist eine Konstrollstruktur die Spr nge in die Zukunft und Vergangenheit einer Berechnung erm glicht Die Umgebung einer Funktion ist als ein lokaler Namensraum be trachtbar Die hierarchische Anordnung solcher Namensr ume ist eine Technik zur Vermeidung von Namenskonflikten Makros dienen zur Syntaxverbesserung Zu unterscheiden sind nor male Makros von READ Makros READ Makros sind z B das quasi quote Zeichen das quote Zeichen das unquote Zeichen und das unguote splicing Zeichen Sie expandieren in der READ Phase des READ EVAL PRINT Zyklus Normale Makros expandie ren in der EVAL Phase Sie k nnen obwohl sie eigentlich un Schemely wegen ihrer m glichen Nebeneffekte sind mit dem Konstrukt define syntax rule definiert werden Einerseits ist ein Makro ein m chtiges Konstruktionsmittel andererseits verursacht ein Makro im Programmier alltag h ufig Fehler weil der Expanionszeitpunkt und die Expansionsum gebung nicht beachtet werden Charakteristische Beispie
283. eispiel Saegezahn Funktion 118 1 23 Struktogramm Wortzaehlung 120 1 24 Skizze eines Binarbaumes 006 124 2 1 Skizze einer Konstrukte Hierarchie 149 2 2 Signatur einer endlichen nicht zirkul ren Liste 161 2 3 set Konstrukt nderung des Zeigers auf eine existie rende Cone Alle oy sak women nen nase Eine 165 2 4 equal Foo Bar gt t 2 ce ee ee eee 167 2 5 Applikation Verwalten von Arbeitsvorgaengen 172 2 6 Neuen Vorgang am Anfang der zirkul ren Liste einf gen cons Zelle Tell was a be a ned are hu 175 484 ABBILDUNGSVERZEICHNIS 2 7 Neuen Vorgang am Anfang der zirkul ren Liste einf gen eons Zelle Tel H 6 6 see ee ee ee ee 176 2 8 Neuen Vorgang in die zirkul re Liste einf gen 177 2 9 Hilfsl sung um die quasi letzte cons Zelle einer zirkul ren Liste z ermitteln seco eee te pee ee tw ee oe 178 2 10 Vorgang aus der zirkul ren Liste entfernen 180 2 11 Rahmen konstruiert aus geschachtelten A Listen 190 2 12 Skizze der B ror ume und der Hauspoststationen 200 2 13 Tiefensuche f r Start Hund ZielF 2 ss 201 2 14 Differenz der X Koordinatenwerte als Sch tzung f r die k rzeste Entfernung vom Knoten zum Zielknoten 206 2 15 Baum Fall 1 einfache Rotation 224 2 16 Baum Fall 2 doppelte Rotation 222 2 224 2 17 Baum Fall 3 einfache Rotation
284. eitidee der funktionalen Programmierung ist der Funktionswert der nur durch Werte der Argumente bestimmt wird So oft wir auch eine Funktion mit den gleichen Argumenten aufrufen stets hat sie den gleichen Wert Die se Eigenschaft engl referential transparency erleichtert wesentlich das Durchschauen einer Konstruktion Beschr nken wir uns auf Konstrukte mit dieser Eigenschaft dann ist eine Funktion problemlos durch eine ef fizientere Funktion die den gleichen Wert bei gleichen Argumenten hat austauschbar Diesen Vorteil gibt es nicht kostenlos Solche nebeneffekt freien Konstrukte erstellen neue Objekte statt modifizierte Versionen von ihren Argumenten Die Neukonstruktion hat im Regelfall einen h heren Rechenzeit und Speicherbedarf Stets ist die Funktion im Zusammenhang mit ihrer Umgebung zu se hen Erst diese Verkn pfung zum sogenannten Closure Konzept meistert Funktionen h herer Ordnung Die folgende Definition in TLC LISP for muliert zeigt explizit die Verkn pfung der Umgebung ENVironemt mit dem LAMBDA Konstrukt durch das explizit notierte CLOSURE Konstrukt T eval gt DE ADDN N Abschliefung fur das folgende lambda Konstrukt CLOSURE Hier ist N eine freie Variable LAMBDA M ADD N M Umgebung speichert Variable N ENV N N 2 5 ABBILDUNGSOPTION FUNKTION MIT UMGEBUNG aJl gt ADDN T eval gt SETO PLUS3 ADDN 3 gt CLOSURE lambda M ADD N M ENV N 3 T eval gt PLUS3
285. ekt eval gt define LOO1 list Reppenstedt 21391 04131 63845 eval gt Modul L Modul L L001 1 21339 O L neburg gt L neburg 21339 04131 63845 Wann eine A Liste effizienter als ein Vektor ist d h eine kleine re durchschnittliche Selektionszeit hat ist abh ngig von der jeweiligen LISP Implementation Als Faustregel gilt dass ein d nn besetzter Vek tor besser als eine A Liste zu implementieren ist Zweidimensionale Matrix Abschnitt 2 2 4 S 213 2 3 2 Abbildung der cons Zelle als Vektor Die CONS Zelle verkn pft zwei symbolische Ausdr cke Abschnitt 1 2 1 S 52 Sie ist das klassische Mittel um eine Liste zu konstruieren Wir bilden im folgenden eine cons Zelle als Vektor ab Den Konstruk tor f r diese cons Zelle nennen wir V cons Damit vermeiden wir Na mensgleichheit und infolgedessen das berschreiben des eingebauten cons Konstruktes Selektoren Pr dikate und Mutatoren haben aus glei chem Grund den Pr fix v Zum Konstruieren einer Liste gehen wir von null der leeren Liste aus Wir definieren daher ein V NULL mit dem Konstrukt vector Die Sternchen im Namen sollen ein versehentliches berschreiben die ser globalen Variablen verhindern N heres zur Benennung Abschnitt 3 1 1 S 377 Das V NULL kann wie folgt definiert werden eval gt define V NULL vector 0 0 eval gt V NULL gt 0 0 Das zugeh rende Pr dikat V nul1 k nnten wir so d
286. ekte die mit dem make Konto Konstrukt erzeugt wurden eval gt Konto A001 gt t eval gt Konto struct gt vector A001 gt f Selektor F r den Zugriff auf die einzelnen Felder hat das define struct Konstrukt Selektoren generiert Ihr Name setzt sich aus dem Pr fix Strukturnamen gefolgt von einem Bindestrich und dem Slotna men Feldnamen zusammen eval gt Konto Adresse Inhaber A001 gt D 21339 L neburg eval gt Konto Adresse Inhaber A002 gt D 21391 Reppenstedt Diese generierten Selektoren benutzen wir zum Definieren der Funk tion Describe Konto Sie stellt die aktuellen Werte eines Kontos dar eval gt define Describe Konto lambda K cond Konto K 312 KAPITEL 2 KONSTRUKTIONEN newline display Inhalt des Kontos display Konto Identifizierung K display i 2 newline display Name Inhaber 1 display Konto Name Inhaber K newline display Adresse Inhaber display Konto Adresse Inhaber K newline display Einzahlungen w display Konto Einzahlungen K newline display Auszahlungen w display Konto Auszahlungen K newline display Kontostand m display Konto Kontostand K t error Kein Konto K eval gt Describe Konto A001 gt Inhalt des Kontos 1 Name Inhaber Leuphana Universit t Adresse Inhaber D 21339 L neburg Einzahlungen O Auszahlungen 0 Kontostand 0 Mutator
287. el Verwahrkonto S 337 Chart Konto Example Konstrukt S 430 Abbildung 3 6 UML Vererbungsbeispiel Verwahrkonto pin over rectangle 300 100 50 20 text Konto MyFont 50 0 0 bitmap build path D bonin scheme image Vererbungspfeil gif filled rectangle 1 100 pin over rectangle 500 100 50 20 text Verwahrkonto MyFont 50 0 0 eval gt Chart Inheritance gt Abbilung 3 6 S 431 Mit der Vererbung wird eine Klassenhierarchie aufgebaut Welche gemeinsamen Eigenschaften von Unterklassen zu einer Oberklasse zu sammengefasst also generalisiert werden und umgekehrt welche Ei genschaften der Oberklasse in Unterklassen genauer beschrieben also spezialisiert werden ist abh ngig vom jeweiligen charakteristischen Un terscheidungsmerkmal der einzelnen Unterklassen Ein solches Merkmal wird Diskriminator genannt Abbildung 3 7 S 432 Er ist das charakteristische Gliederungsmerkmal f r die Zuor dung in eine Oberklasse oder eine Unterklasse Er bestimmt einerseits die Generalisierung und andererseits die Spezialisierung Spezialisiert 432 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Foo Discriminator SubclassA SubclassB SubclassC Legende A Dicriminator Vererbungsrichtung charakteristisches Gliederungsmerkmal f r die Generalisierungs amp Spezialisierungs Beziehung Oberklasse von SubclassA SubclassB und Subclassc Eigenschaften von Foo sind i
288. els einer Kontenver waltung die Bildung von Konstrukten dar Im Kapitel II wird mit diesem Beispiel die Modularisierung im Zusammenhang mit verschiedenen Ab bildungsoptionen Liste Vektor Zeichenkette etc weiter vertieft 1 2 1 Interaktion Operand Operation Bei der Bildung eines Konstruktes orientiert man sich intuitiv an Fachbe griffen des jeweiligen Aufgabengebietes Sie bezeichnen z B reale Ob jekte Gegenst nde oder konzeptionelle Einheiten In unserem Beispiel einer Kontenverwaltung k nnten daher erste Orientierungspunkte sein Ein Konto eine Buchung oder ein realer Gegenstand wie der Akten schrank im B ro des Buchhalters Ein Konstrukt bildet dann Eigenschaf ten und ihre Ver nderungen einer solchen realen Einheit in Wechsel wirkung mit anderen realen Einheiten ab Es modelliert die Eigen schaften und Aktionen Die gedankliche Verkn pfung zwischen realen Einheiten und den Sprachkonstrukten ist die Basis f r das Formulieren und Verstehen von Programmen Ein direkter Bezug zwischen realer Einheit und Konstrukt z B hergestellt durch eine Namensgleichheit er leichtert daher das Verstehen N heres Abschnitt 3 1 1 S 377 Die Matrix Tabelle 1 3 S 53 verdeutlicht Alternativen zur Bil dung von Konstrukten Sie skizziert in der Realit t vorgefundene Ar beiten Aktivit ten als Operatoren bezogen auf Operanden deren Zu stand manipuliert wird Entsprechend dieser Matrix kann man ei
289. en bart ist beim jeweiligen Leser ungewiss ob dieser eine Formulierung tatsachlich hinreichend genau versteht Kennt z B der Programmierer den Begriff Rechnungsabgrenzungs Konto Assoziiert er damit die Definition die an anderer Stelle vielleicht au erhalb der Dokumentati onskette in der Terminologie der Kaufleute formuliert wurde oder muss dieser Begriff in dem betreffenden Dokument erst erkl rt werden oder gen gt ein Verweis auf eine einschl gige Fundstelle Jede einzelne Formulierung hat sich an der Antwort auf die Frage zu orientieren Welche Assoziationen kann der Adressat beim Lesen ha ben welche davon sind nicht pr zise genug oder stehen sogar im Wi derspruch zum Gemeinten Es geht um die Entscheidung Was ist un bedingt zu beschreiben und was kann f r sich selbst sprechen Je mehr f r sich selbst spricht um so k rzer wird das Dokument Die Umfangre duktion ist im Hinblick auf die Lesemotivation ein positives Ziel Wir wollen daher nur etwas zus tzlich erl utern wenn der Leser ohne die se Erl uterung die Aussage nicht oder falsch versteht Damit beugen wir einer kostenintensiven unn tzen und zum Teil sch dlichen Aufbl hung der Dokumentation vor Prinzipiell ist aus dem Quellcodetext mit Kenntnis des jeweiligen LISP Systems die Abarbeitung nachvollziehbar Das Wie ist wenn auch recht m hsam rekonstruierbar Aus welchen Gr nden wir ein Konstrukt gerade so und nicht anders definieren ist vom Leser nicht ohn
290. en tierens Beweisens und Schlie ens In der Linguistik ist das Konstruieren das Zusammenf gen von Satzgliedern Wortgruppen und W rtern nach Regeln der Grammatik Die Konstruktion ist eine in Konstituenten zerleg bare komplexe sprachliche Einheit Als Einstieg dient ein klassisches LISP Beispiel Symbolisches Diffe renzieren Dabei zeigt sich der Vorteil ein Programm als einen Verbund von Konstruktor Selektor Pr dikat und Mutator zu konzipieren Ab schnitt 2 1 S 141 Die Wahl der zweckm f igen Abbildung von Daten die sogenannte Datenrepr sentation ist eine Kompromissentscheidung zwischen diver sen zum Teil konkurrierenden Anforderungen z B Effizienter Daten zugriff Datenmodifizierbarkeit Speicherplatzbedarf oder Lebensdauer LISP verf gt daher wie andere Programmiersprachen auch nicht nur ber eine Darstellungsm glichkeit Neben der Liste gibt es z B Vektoren Zeichenketten Ports und Str me Wegen der in LISP bestehenden Am bivalenz zwischen Daten und Programm Abschnitt 1 1 3 S 27 sprechen wir hier allgemein von einer Abbildungsoption Zun chst vertiefen wir die Abbildungsoption Liste als Grundlage ei ner Konstruktion Abschnitt 2 2 S 160 Durch Modifikation der cons Zelle konstruieren wir eine zirkul re Liste Abschnitt 2 2 1 S 166 Darauf aufbauend werden die Konstrukte f r die Assoziationsliste Abschnitt 2 2 2 S 183 und die Eigenschaftsliste Abschnitt 2 2
291. en Nachfolgern Ausgabe Weg setzt diese Kette r ckw rts vom Ziel Knoten zum Start_Knoten als Liste zusammen Ausgabe Weg lambda Knoten cond null Knoten list t append 204 KAPITEL 2 KONSTRUKTIONEN Ausgabe Weg getprop Knoten Weg list Knoten Erlauterung siehe Tabelle Tiefensuche lambda cond null Liste eroeffnete Knoten list t set Analyse Knoten vgl Al l car Liste eroeffnete Knoten set Liste eroeffnete Knoten cdr Liste eroeffnete Knoten set Liste geschlossene Knoten cons Analyse Knoten Liste geschlossene Knoten cond eq Analyse Knoten Ziel Knoten Ausgabe Weg Analyse Knoten t set Arbeitsliste Get Nachfolger Analyse Knoten set Arbeitsliste Differenz Knoten Arbeitsliste Liste geschlossene Knoten set Liste eroeffnete Knoten append Arbeitsliste Differenz Knoten Liste eroeffnete Knoten Arbeitsliste for each lambda Knoten putprop Knoten Weg Analyse Knoten Arbeitsliste Tiefensuche Um ein Abbruchkriterium fur Ausgabe Weg zu haben putprop Start Knoten Weg list Tiefensuche eval gt Depth first Search H F gt H CA BE F Das Programm Depth first Search expandiert stets den ersten Knoten von Liste eroeffnete Knoten Anders formuliert Die Nach folger von car Liste eroeffnete Knoten bilden die Arbeitsli ste ndern wir z B f r den Knoten H die
292. en m glicher Konstrukte abbildbar werden Dazu bedarf es ihrer Strukturierung in Teilbereiche die dann weitge hend unabh ngig von einander mehr und mehr pr zisiert werden Die Konstruktion wird als Geflecht von Konstrukten Moduln die ber Schnittstellen miteinander verkn pft sind spezifiziert Wir verwenden hier den blichen Begriff Modul im Sinne eines Synonyms f r Konstrukt bzw Teilkonstruktion Die Dopppelgesichtigkeit jeder Schnittstelle die auch der englische Begriff interface betont bezieht sich auf die Menge aller Annahmen die jeweils der eine Modul vom anderen unterstellt und umgekehrt Innerhalb der Schnittstelle werden daher die relevanten Ei genschaften f r ihre Kommunikation pr zisiert 3 2 SPEZIFIKATION MIT LISP 411 3 2 2 Import Export Beschreibung Die Wechselwirkungen zwischen den einzelnen Moduln sind mit Hilfe einer Benutzt Relation und einer Enth lt Relation beschreibbar Die Ent halt Relation verweist auf die Moglichkeit dass ein Modul selbst wieder in Module zerlegbar sein kann Die Benutzt Relation verweist auf die Modul Schnittstelle Die Modul Schnittstelle ist gliederbar in einen Import und einen Export Teil Die Import Schnittstelle beschreibt welche Konstrukte der Modul aus anderen Moduln benutzen kann Die Export Schnittstelle nen nt die Konstrukte die der Modul fiir andere Moduln bereitstellt Wir sprechen daher von einem Import wenn ein Modul mimport eine Leistung eines Moduls
293. en wir hier in einer A Liste RAHMEN DATENBANK zusammen Es sei angemerkt dass es zweckm iger ist den einzelnen Rahmen als Eigenschaft einer Kontonummer zu verwalten Die Konstrukte f r eine solche Bindung behandeln wir im Abschnitt 2 2 3 S 191 eval gt define RAHMEN DATENBANK Rahmen 2 2 ABBILDUNGSOPTION LISTE 191 KOOL Kontotyp Gruppe Sachkonto Kontoinhaber Name Krause Telefon 4711 Letzte Buchung Datum 20101127 Buchungsart Auszahlung EUR 5 0 Einzahlung EUR Datum 10 0 20101127 55 0 201017126 Auszahlung EUR Datum 5 0 20101124 Saldo EUR 60 0 K002 Kontotyp Gruppe Haushalt Kontoinhaber Name Eiser Letzte Buchung Datum 20101127 Buchungsart Einzahlung EUR 105 0 Einzahlung EUR Datum 105 0 20101127 Saldo EUR 105 0 2 2 3 Eigenschaftsliste Die Eigenschaftsliste kurz P Liste Property List genannt ist das klas sische Konzept zur Abbildung eines Lexikons Mit der Definition eines Symbols Literalatoms wird in den klassischen LISP Systemen eine an das Symbol gebundene Eigenschaftsliste verf gbar Jedes Symbol hat ei ne P Liste die zun chst leer ist Ziehen wir eine Analogie zur Kernspal tung in der Physik dann entsprechen den Neutronen Elektronen Pro tonen die Zellen des Literal Atoms Abh ngig vom jeweiligen LISP System und seiner Implementation fasst das Symbol bestimmte Zellen slots zusammen d h einem Symbol sind Speicherm g
294. en wir vorab folgendes einfache Beispiel eval gt define Foo list call cc lambda c t eval gt Foo gt t Beim Auswerten dieses call cc Konstruktes sind an die lambda Variable c die zu diesem Zeitpunkt noch ausstehenden Abarbeitungs schritte gebunden Es sind die Schritte Ausf hrung von list und Bin dung von Foo an den Wert von list Nach dem Auswerten hat das call cc Konstrukt den Wert t Die Bindung von c ist wieder auf gel st Sie wurde hier nicht genutzt Wir haben eine Situation als w re folgende Formulierung auszuwerten eval gt define Foo list t In der folgenden Formulierung nutzen wir die Bindung von c eval gt define Foo list call cc lambda c c Der R ckgabewert des call cc Konstruktes ist der Wert von c also die noch ausstehenden Abarbeitungsschritte in Form einer Conti nuation Mit dieser Continuation bildet list eine Liste und define bindet Foo an diese Liste eval gt gt Foo gt lt continuation gt Wir greifen auf diese Continuation zur ck und veranlassen die Aus f hrung der zun chst nicht vollzogenen Abarbeitungsschritte eval gt car Foo gt lt continuation gt eval gt car Foo t eval gt Foo gt t Es sei die Summe einer Integerzahlenfolge mit den Grenzwerten m und n zu bestimmen Die L sung bedingt die Abbildung einer Wieder holung Eine solche Wiederholung ist als Rekursion realisierbar Die Re kursion k nnen wir si
295. endungen AB EF B Arbeits lis te listw 1F im Programm Depth first Search bei Startknoten H Zielknoten F und dem B ro von Pro gramm in Tabelle 2 5 S 199 Tabelle 2 6 Reihenfolge im Programm Depth first Search 2 2 ABBILDUNGSOPTION LISTE 203 E1 Ein Knoten ist ein Symbol E1 1 Die Koordinaten eines Knotens sind als Eigenschaft Ort ge speichert E1 2 Die Nachfolger eines Knotens und ihre Entfernungen sind als Eigenschaft Nachfolger gespeichert und zwar als folgende A Liste lt nachfolger gt lt entfernung gt T1 Beispiel T1 1 Daten lt gt Programm in Tabelle 2 5 S 199 T1 2 Applikation Tabelle 2 6 S 202 eval gt Depth first Search H F Programm Depth first Search eval gt define Depth first Search lambda Start_Knoten Ziel_Knoten letrec Liste eroeffnete Knoten list Start Knoten Liste geschlossene Knoten list Analyse Knoten list Arbeitsliste list Get Nachfolger vgl El 2 ohne Entfernungsangaben lambda Knoten map lambda X car X getprop Knoten Nachfolger Gibt Liste 1 zur ck ohne die Elemente die in Liste_2 vorkommen Differenz Knoten lambda Liste 1 Liste 2 cond mull Liste 1 list member car Liste 1 Liste 2 Differenz Knoten cdr Liste 1 Liste 2 t cons car Liste 1 Differenz Knoten cdr Liste 1 Liste_2 Die Eigenschaft Weg verkn pft den Analyse Knoten mit sein
296. enennt das Symbol blicherweise die Additi onsfunktion Anonyme Funktionen Abschnitt 1 1 4 S 35 Hinweis Begriff Funktion Wie in LISP ischer Terminologie blich gt 2 178 sprechen wir hier von einer Funktion oder auch LISP Funktion obwohl das Konstrukt im mathematischen Sinne keine Funktion darstellt sondern eine Prozedur oder einen Algorithmus Der Begriff Prozedur betont den Prozess f r die Berechnung von Werten f r eine Funktion Mathematisch ist eine Funk tion eine existierende eindeutige Zuordnung von Elementen der Definiti onsmenge engl domain zu Elementen der Wertemenge engl range 1 1 EINFUHRUNG HANDHABUNG VON KONSTRUKTEN 23 wobei es keinen Berechnungsprozess gibt Wenn verk rzt formuliert ist Eine Funktion F gibt den Wert Y zur ck dann ist damit gemeint dass die algorithmische Repr sentation der Funktion F den Wert Y produziert kurz Es handelt sich um die Ausf hrung der Prozedur F In den Anf ngen der Informatik wurde die Funktion oft wie bei der Regis tertransfersprache RTS definiert Funktionen sind Abk rzungen f r h u figer auftretende und oder komplizierter Boolsche Verkn pfungen Sie sind wie die Variablen vom bin ren Typ Die Eingangsgr en von Funktionen sind entweder Ausdr cke oder dezimale Konstanten Indices 141 Mit der Nennung des Operations Symbols als erstes Element einer Liste folgt LISP der Pr fix Notation Die Pr fix Notation auch Polnisch
297. ens gleichheit und infolgedessen das berschreiben des eingebauten cons Konstruktes zu vermeiden Zu F cons definieren wir die Selektoren F car F cdr die Pr dikate F pair F null und die Mutatoren F set car und F set cdr Die Konstruktionsbasis Mutter Erde einer Liste ist null die lee re Liste Analog dazu ist eine funktionale Anfangsgr e ein funktionales null zu definieren Wir nennen es F NULL Die Sterne im Namen dienen dazu eine versehentliche Namensgleichheit beim Programmie ren zu erschweren weil wir nur wichtigen globalen Variablen einen Na men mit Sternen geben lt gt Abschnitt 3 1 1 S 377 eval gt define F NULL lambda gt ERROR Kein Funktionskorper Das 1ambda Konstrukt erfordert zumindest einen symbolischen Aus druck als Funktionsk rper Um Konflikte mit anderen symbolischen Aus dr cken zu vermeiden k nnten man das gensym Konstrukt lt gt Ab schnitt 2 4 4 S 259 verwenden Wir nutzen hier einfach das Symbol F NULL selbst eval gt define F NULL lambda F NULL Exkurs Funktionale Konstante Die Funktion lambda x F NULL w re kein zweckmalsiges Bei spiel f r einen konstanten R ckgabewert denn ihre Applikation kann un ter Umst nden zum Fehler f hren eval gt lambda X F NULL 1 0 gt ERROR Divison durch Null Die Aufgabe eines Konstruktors ist das Zusammenf gen von Teilen Beim cons Konstrukt wird der car Teil mit dem cd
298. entierung entsprechen den Empfehlungen von Abschnitt 3 1897 Zum Verstehen der Aufgabe sind vorab Anforderungen und Testf lle formuliert Dabei verweist die Abk rzung A auf eine Anforderung und die Abk rzung T auf einen Testfall A1 Die Ableitungsfunktion ermittelt die Ableitung einer mathe matischen Formel nach einer vorgegebenen Variablen A2 F r dieses symbolische Differenzieren gelten die folgenden Ablei tungsregeln A2 1 Ableiten einer Konstanten gE 0 A2 2 Ableiten einer Variablen E falls u x dx O falls sonst A2 3 Summenregel duty un ar A2 4 Produktregel au 1 xvtux 2 X A3 Die abzuleitende Formel ist in Pr fixnotation anzugeben ax bx c T1 Beispiel 2 T 2ax b eval gt ableitungsfunktion Mik Ade a x X Fb ry gt a 2 X bD Wert der Beispielfunktion an der Stelle x 1 mit a 3 und b 5 eval gt ableitungswert Hee a Ae XXI ee 1 gt 11 2 1 VERSTEHEN EINER KONSTRUKTION 193 Programm Symbolisches Differenzieren define Ableitungsfunktion lambda Mathematischer Ausdruck dx letrec Konstante lambda x number x Variable lambda x symbol x Gleiche Variable lambda Var_1 Var_2 and Variable Var_1 Variable Var_2 eq Var 1 Var_2 Konstruktor Selektoren und Pr dikat f r die Summe Summe lambda x and pair x or eq car x eq car x Plus
299. entlangwandern cond eq Listen_Zeiger Aktuelle Zeiger Vorhergehende_ Position t Quasi letzte Element Listen_Zeiger cdr Aktuelle Zeiger cdr Vorhergehende_Position ats 0 0 0 Listen Zeiger Element_1 Element_2 Element 3 Vorhergehende Position Aktuelle Zeiger Legende Symbole S 165 Programmcode S 170 Abbildung 2 9 Hilfsl sung um die quasi letzte cons Zelle einer zir kul ren Liste zu ermitteln 2 2 ABBILDUNGSOPTION LISTE 179 Zirkulaere_Liste modifiziert Abbildung 2 10 S 180 Mit dem Mutator set angewendet auf die 1ambda Variable Zirkulaere_Lis te wird jedoch nur dieser Zeiger ge ndert d h auf die um das erste Element verkurzte zirkulare Liste gesetzt Der Zeiger ARBEITSPLAN bleibt davon unber hrt Wird nach dem L schen eines Vorganges das Programm Verwal ten von Arbeitsvorgaengen mit dem Argument ARBEITSPLAN ein zweites Mal gestartet dann w re von ARBEITSPLAN das erste Element null lt gt Abbildung 2 10 S 180 Um diesen Effekt zu vermei den muss der Zeiger ARBEITSPLAN modifiziert werden Dies kann mit dem Mutator set in der Definitions Umgebung von ARBEITS PLAN erfolgen Dazu k nnte z B das Programm Verwalten von Ar beitsvorgaengen an der Stelle der Programm Ende Behandlung wie folgt ge ndert werden bisher eq Antwort Stop display Vorgangsverwaltung beendet nderung eq Antwort Stop d
300. er extensive libraries documentation for both beginners and experts and more It supports the creation of new programming langua ges through a rich expressive syntax system Example languages include Typed Scheme ACL2 FrTime Lazy Scheme and ProfessorJ which is a pedagogical dialect of Java Latest release 4 2 2 October 2009 http www plt scheme org Zugriff 24 Oct 2009 1 1 1 Syntax Symbolischer Ausdruck Die Bausteine zur Konstruktion einer Liste sind die leere Liste und Lis ten Elemente Ein einfaches Element kann z B eine Zahl oder ein Sym bol sein Solche Elemente werden auch Atome genannt Diese Bezeich nung weist darauf hin dass sie einerseits eine kleinste betrachtbare Einheit und andererseits der Stoff zum Bau komplexer Konstruktionen sind Sp ter zeigen wir dass auch in LISP die Atome aus elementaren Teilchen bestehen Die leere Liste wird dargestellt durch eine ffnende Klammer un mittelbar gefolgt von einer schlie enden Klammer Diese leere Liste wird klassischerweise durch das Symbol nil bzw NIL repr sentiert In Scheme steht f r die leere Liste das Symbol null Werden Elemente in die leere Liste eingef gt wobei die Elemente selbst wiederum Listen sein k nnen dann entstehen geschachtelte Listen Das Fundament Mutter Erde f r solche komplexen Strukturen ist NIL die leere Liste Die Tabelle 1 1 S 16 zeigt Schritte zur Konstruktion einer geschach telten Listenstruk
301. er Konstruk tor Bilde Summe Entsprechendes gilt f r die Produktregel d uxv 2 V Ux 2 Hier setzt der Konstruktor Bilde Produkt in Kombi nation mit Bilde Summe das Ergebnis zusammen Nehmen wir als Beispiel an dass S_1 an den Wert 5 und S_2 an den Wert 7 gebunden sind so dass gilt eval gt Bilde Summe S 1S 2 gt 5 7 Um dieses Ergebnis zu vereinfachen konnen wir statt 5 7 den Wert 12 zur ckgeben Die Vereinfachung der gebildeten Summe ber nimmt das Konstrukt Vereinfache Summe das dazu auf Teile der ge bildeten Summe zugreifen muss F r den Konstruktor Bilde Summe ben tigen wir korrespondierende Selektoren damit Vereinfache Sum me auf seine Teile zugreifen kann Das Konstrukt Bilde Summe gibt eine Liste mit dem Additionsope rator als erstes Element Pr fixnotation zur ck Damit erzeugt Bilde Summe die gleiche Struktur wie bei einer eingegebenen Summe die es abzuleiten gilt d h der Wert an den Formel gebunden ist Wir k nnen daher f r Vereinfache Summe auf die selben Selektoren zur ckgrei fen Erster Summand und Zweiter Summand sind damit auch die korrespondierenden Selektoren zu Bilde Summe Entsprechendes gilt 156 KAPITEL 2 KONSTRUKTIONEN fur den Konstruktor Bilde Produkt mit seinen Selektoren Multi plikand und Multiplikator in Verbindung mit Vereinfache Pro dukt Hinweis Selektoraufgabe Die Doppelaufgabe der Selektoren Erster Summand und Zweiter Sum mand d h einerseits den Wert
302. erbung Eine Struktur kann auf einer vorher definierten Struktur auf bauen Charakteristisches Beispiel f r Abschnitt 2 6 Das folgende Konstrukt Typbestimmung basiert auf einem einfachen Bestimmungsbaum engl discrimination tree F r diesen Baum defi nieren wir zwei Strukturen eine f r Knoten und eine weitere f r Baum bl tter Beide mit define struct Konstrukten definierten Strukturen m ssen auf top level erkl rt werden und k nnen daher nicht in das letrec Konstrukt von Typbest immung integriert werden eval gt define struct Baum Blatt Wert mutable transparent eval gt define struct Knoten Test Ja Nein mutable transparent eval gt define Typbestimmung lambda Sexpr letrec Naechster Knoten lambda Testergebnis Baum if Testergebnis Knoten Ja Baum Knoten Nein Baum 16N heres zur Konstruktion von discrimination nets z B 36 2 7 MODULE LOKALER NAMENSRAUM 319 Bestimmung lambda Sexpr Baum cond Baum Blatt Baum Baum Blatt Wert Baum Knoten Baum Bestimmung Sexpr Naechster Knoten Knoten Test Baum Sexpr Baum t LISP Typen make Knoten vector make Baum Blatt Vektor make Knoten pair make Baum Blatt Paar make Knoten symbol make Baum Blatt Symbol make Knoten number make Baum Blatt Zahl make Baum Blatt Unbekannt Bestimmung Sexpr LISP Typen eval gt Typbestimmung Foo gt
303. ere Klasse Of fener Vorgang S 342 Mit einer simplen Klasse Foo zeigen wit die Nichteinhaltung das Interfaces eval gt define Offener Vorgang Bearbeitung mixin Akte mixin Verwahrkonto eval gt define OVOOl new Offener Vorgang id 9 name Erika Musterfrau eval gt send OV001 get Identifizierung gt ide 9 eval gt define Foo class object super new eval gt define Offener Vorgang Bearbeitung mixin Akte mixin Foo gt ERROR Akte mixin argument does not implement lt interface Verwahrkonto interface gt s lt class Foo gt Traits Ein Trait Eigenschaft Wesenszug ist hnlich wie ein Mixin Es kap selt auch eine Menge von Methoden die dann einer Klasse hinzugef gt 2 8 KLASSE INSTANZ MODELL 345 werden Ein Trait erlaubt jedoch dass die einzelnen Methoden mit Ope ratoren trait Konstrukten manipuliert werden konnen z B mit dem trait sum Konstrukt das die Methoden von zwei Traits mischt oder mit dem trait exclude Konstrukt das eine Methode von einem Trait loscht oder mit dem trait alias Konstrukt das eine Kopie einer Me thode mit neuem Namen hinzuf gt Der praktische Nutzen der Traits ist die Kombinationsm glichkeit selbst wenn gemeinsame Methoden betroffen sind Dabei muss der Pro grammierer auftretende Kollisionen selbst insbesondere durch aliasing methods behandeln Hinweis trait Konstrukte Um in PLT Scheme 7 mit der Entwicklungsumgebun
304. ererbung Im Abschnitt 2 8 2 S 337 wurde die Klasse Konto durch eine Klas se Verwahrkonto spezialisiert Anders formuliert die Klasse Konto vererbt ihre Eigenschaften Slots und Methoden an die Klasse Ver wahrkonto Instanzen dieser Klasse haben beide Eigenschaften die ihrer Superklasse und ihrer eigenen Klasse Diese Vererbung Inheritan ce wurde wie folgt konstruiert eval gt define Verwahrkonto class Konto In UML wird diese Beziehung zwischen den Klassen durch einen Pfeil mit einer besonders gro en Spitze A von der Unterklasse zur Ober klasse abgebildet Diese Pfeilspitze l sst sich als Bild mit dem bitmap Konstrukt in die Zeichung einbauen Die Bilddatei ist ber das Konstrukt build path zu spezifizieren Dabei kommen das gif Format und das jpg Format in Betracht Chart Inheritance Konstrukt eval gt define Chart Inheritance let MyFont make object font 40 modern normal bold vc append 18 GIF Graphics Interchange Format ist ein Bildformat mit verlustfreier Komprimierung fur Bilder mit geringer Farbtiefe http www w3 org Graphics GIF spec gif89a txt Zugriff 18 Jan 2010 19 JPEG bzw JPG ist die umgangsprachliche Bezeichnung f r die Norm ISO IEC 10918 1 die von der Joint Photographic Experts Group Anfang der 90iger Jahre entwickelt wurde http www jpeg org Zugriff 18 Jan 2010 3 3 NOTATION MIT UML 431 Konto Verwahrkonto Legende Beispi
305. erklasse PC Hersteller The LISP Company Redwood Estates CA 95044 USA A 3 PLT SCHEME UBERSICHT 467 Merkmale TLC LISP zeichnet sich durch eine klare Grundkonzeption aus die die Realisierung von first class Objekten zum Ziel hat Es weicht daher in einigen Punkten von Common LISP ab Versucht wird das ZetaLISP f r PCs verf gbar zu machen Integriert sind daher ein Klassensystem und ein Paket Konzept Zus tzlich enth lt TLC LISP die von LOGO bekannte Turtle Grafik Der Lieferumfang umfasst auch den Compiler und Interpreter in LISP Quellecode e UCI LISP http openlibrary org b OL4149344M new UCI_LISP_manual Zugriff 22 Jan 2010 Rechnerklasse PC urspr nglich fur PDP 10 entwickelt Bezugsquelle H Peters Eielkampsweg 50 D 2083 Halstenbeck Merkmale Eine Implementation f r PCs in vollem Umfang der urspr nglichen PDP 10 Version nur noch historisch bedeutsam e XLISP http www xlisp org Zugriff 22 Jan 2010 Rechnerklasse PC Hersteller David Betz Public Domain Programm Merkmale XLISP integriert Konzepte von Scheme und Common LISP z B 114 Es enth lt Konstrukte f r die objekt orientierte Programmierung Eine Programmierumgebung fehlt e ZetaLISP http www emacswiki org emacs ZetaLisp Zugriff 22 Jan 2010 Rechnerklasse LISP Maschine Hersteller Hersteller der jeweiligen LISP Maschine Grundlage bildet die MIT LISP Masc
306. ersion 1 1 01 Sep 1997 UML Summary UML Metamodel UML Notation Guide UML Semantics UML Extensi on Business Modeling Object Constraint Specification http www rational com uml 1 1 Zugriff 11 Nov 1997 Jonathan A Ross T A Dialect of Lisp or LAMBDA The Ultimate Software Tool LISP Conference New York 1982 pp 114 122 Jonathan Rees William Clinger Editors Revised 3 Report on the Algorithmic Language Scheme AI Memo 848a Artificial Intelligence Laboratory of the Massa chusetts Institute of Technology September 1986 Karl Heinz R diger Hrsg Algorithmik Kunst Semiotik Hommage f r Frie der Nake Heidelberg Synchron Wissenschaftsverlag 2003 ISBN 3 935025 60 Festschrift f r Frieder Nake einer der gro en Pioniere der Computergraphik G R Rogers COBOL Handbuch M nchen Wien R Oldenbourg Verlag 1988 496 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 LITERATURVERZEICHNIS Erich Rome Thomas Uthmann Joachim Diederich KI Workstations Uberblick Marktsituation Entwicklungstrends Bonn Reading Massachusetts u a Addison Wesley Deutschland 1988 J Rumbaugh M Blaha W Premerlani E Eddy W Lorenson Objekt oriented Modelling and Design Englewood Cliffs Prentice Hall 1991 Erik Sandewall Ideas about Management of LISP Data Bases Int Joint Conf on Artificia
307. ert bis der Sender in der Lage ist den Wert uber den Kanal bereitzustellen Mit dem channel put Konstrukt wird blockiert bis der Empf nger in der Lage ist den Wert zu akzeptieren Im zwei ten Fall buffered asynchronous channels wird eine zeitliche Entkopp lung bewirkt Mit dem folgenden Beispiel Server wird die Arbeitsweise der asynchronous channels skizziert Dazu bedarf es der PLT Scheme Bibliothek async channel d h eval gt require scheme async channel Den Thread konstruieren wir in einem Namensraum mit den beiden lo kalen lambda Variablen Input Channel und Output Channel wie folgt eval gt define Server lambda Input channel Output channel thread lambda define get lambda async channel get Input channel define put lambda x async channel put Output channel x define do long computing lambda Some work sqrt 7 0 sqrt 7 0 let loop data get case data add begin put 1 get loop get long begin Dut do long computing loop get Cott void 79 gt Hinweis let Konstrukt mit Sprungmarke Hier nutzen wir das 1et Konstrukt in folgender Auspr gung eval gt let lt proc id gt lt id gt lt init expr gt lt body gt mit lt proc id gt Innerhalb von lt body gt an das let Konstrukt selbst gebunden 311dee der PLT Scheme Dokumentation entnommen file C Programme PLT doc reference async
308. ert wer den als Werte von Variablen oder in komplexen Datenstrukturen 4 Objekte k nnen sowohl Argument als auch R ckgabewert einer Funk tion sein 5 Objekte sterben nicht Ein Objekt wird unbenutzbar unzugreif bar und damit zwecklos Der von ihm belegte Speicherplatz kann vom LISP System als wieder verf gbar erkl rt werden vorausge setzt die Unbenutzbarkeit wird erkannt Das LISP System stellt fest ob ein Objekt als M ll engl garbage zu betrachten ist Algo rithmen die dies erkennen bezeichnet man als garbage collection Algorithmen R Popplestone spricht in diesem Kontext von items die fundamentale Rechte besitzen N heres lt gt 2 Sequenz Wir nehmen an ein symbolischer Ausdruck Gesamt setzt sich aus den Teilen Teil 1 Teil 2 und Teil 3 zusammen wobei diese Teile eben 70 KAPITEL 1 KONSTRUKTE Teil 1 Teil 2 Teil 3 Legende M A Jackson Notation 98 Abbildung 1 16 Grafische Darstellung einer Sequenz eval gt define Gesamt lambda Teil 1 Teil 2 Teil 3 define Teil 1 lt sexpr gt f r Modul Teil 1 define Teil 2 lt sexpr gt f r Modul Teil 2 define Teil 3 lt sexpr gt f r Modul Teil 3 Gesamt gt lt sexpr gt f r Modul Teil 3 RUckgabewert ist der Wert von Teil 3 eval gt eval gt eval gt eval gt Tabelle 1 11 Programmfragment Sequenz von Symbolen falls symbolische Ausdr cke sind Vorstellbar ist dass Ge
309. erte ha ben Da diese Zukunft als KONSTRUKTIONS REST gespeichert ist k nnen wir sie erneut ausf hren Die Ausgabe von Var und L zeigt wie der diese Werte selbst wenn KONSTRUKTIONS REST in einer ent sprechend ge nderten Umgebung ausgef hrt wird eval gt continuation KONSTRUKTIONS REST gt t eval gt KONSTRUKTIONS REST Dummy gt Vollzug 2 Schritt mit Bindungen Aussen 12 Innen 1 2 3 4 5 Ds ochrict eval gt let Var 7 hb ie b a aj KONSTRUKTIONS REST Dummy gt Vollzug 2 Schritt mit Bindungen Aussen 12 Innen 1 2 3 4 5 n Sschrite Enth lt die Folge keine negativen Zahlen dann entspricht die Foo Definition mit dem call cc Konstrukt der urspr nglichen Fassung eval gt define KONSTRUKTIONS REST null eval gt Foo 2 1 2 3 gt vollzug 2 Schritt mit Bindungen Aussen 4 Innen 1 2 3 n schrittE eval gt continuation KONSTRUKTIONS REST ses HE Der Continuation Mechanismus erzeugt Einheiten im Sinne von first class Objekten Abschnitt 1 2 2 S 65 Sie sind daher auch als Ar gument einsetzbar Wir k nnen eine Continuation mit sich selbst als ein Argument aufrufen Einen solchen Fall zeigt das folgende Konstrukt 2 5 ABBILDUNGSOPTION FUNKTION MIT UMGEBUNG 291 Summe m gt n Es ermittelt die Summe der Integerzahlen von der unte ren Grenze m bis zur oberen Grenze n Zum Verstandnis dieser Selbst bergabe bei Continuations diskutier
310. erten Leistung zu erhalten Beide Aspek te betreffen die gesamte Konstruktion einschlie lich Spezifikation und Dokumentation also nicht nur die Konstruktion des Quellcodetextes In diesem Kapitel diskutieren wir Empfehlungen f r eine durchschau bare transparente Dokumentation Abschnitt 3 1 S 373 Fragen der Benennung von Konstrukten Abschnitt 3 1 1 S 377 und der Kommentierung im Quellcodetext werden vertieft Abschnitt 3 1 2 S 389 Dabei er rtern wir die Bezugnahme auf vorhergehende und nachfolgende Dokumente Abschnitt 3 1 2 S 389 Ein kleines Re gelsystem verdeutlicht diese Empfehlungen Abschnitt 3 1 4 S 397 Es weist Grundz ge der Konstruktion von sogenannten Produktionssy stemen auf LISP ist wie jede h here Programmiersprache zur Spezifikation einer Aufgabe einsetzbar Wir k nnen mit LISP nicht nur die L sung ei ner Aufgabe formulieren sondern auch den L sungsraum beschreiben Die Spezifikation des L sungsraums befasst sich etwas salopp formu liert mit dem Problem Was gesollt werden soll kurz mit dem Was d h mit der deskriptiven Aufgabenprazisierung Die Programmierspra 17 B im Sinne von OPS5 65 3 1 TRANSPARENZ DER DOKUMENTATION 373 che im engeren Sinne zielt auf das Problem wie das Spezifizierte rea lisiert wird kurz auf das Wie Die Grenze zwischen Was und Wie ist flie end Das realisierbare Was enth lt in der Praxis mindestens impli zite Wie Aussagen
311. esetzt werden kann Von der Spezifikation Abschnitt 3 2 S 403 bis zur Pr sentaion von Do kumenten Charakteristisches Beispiel f r Abschnitt 3 4 Idee von Hartmut Fritzsche Immo O Kerner Man or Boy Probleme der Rekursion In Compilern in Informatik Spektrum 20 151 158 1997 module LISP Wizard scheme 3 4 PRASENTATION SLIDESHOW 445 require slideshow require slideshow code define Foo lambda k x1 x2 x3 x4 x5 letrec Bar lambda set k k 1 Foo k Bar x1 x2 x3 x4 if lt k 0 x4 x5 Bar slide title Rekursion zum Nachdenken vc append 20 code define Foo lambda k x1 x2 x3 x4 x5 letrec Bar lambda set k k 1 Foo k Bar x1 x2 x3 x4 if lt k 0 x4 x5 Bar item Aufruf von Foo code Foo 4 lambda lambda lambda 1 lambda lambda tem number gt string i OO lambda 1 lambda 1 lambda 1 lambda 0 End LISP Wizard F 4 lambda 1 eval gt require LISP Wizard gt Abbildung 3 11 S 446 446 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Rekursion zum Nachdenken define Foo lambda k xl x2 x3 x4 x5 letrec Bar lambda set k k 1 Foo k Bar x1 x2 x3 x4 if lt k 0 x4 x5 Bar Aufruf von Foo Foo 4 lambda 1 lambda 1 lambda 1 lambda 1 lambda
312. eu Vorgang fertig bearbeiten OK Ende Stop Zeige Vorgang sonst Neu Bitte geben Sie Ihren Vorgang ein Zeichenkette Mietvertrag erneuern Soll Ihr neuer Vorgang vorher eingef gt werden Ja Ja N chster Vorgang Ja Neuen Vorgang einf gen Neu Vorgang fertig bearbeiten OK Ende Stop Zeige Vorgang sonst sonst Bearbeiten Sie Mietvertrag erneuern N chster Vorgang Ja Neuen Vorgang einf gen Neu Vorgang fertig bearbeiten OK Ende Stop Zeige Vorgang sonst stop Vorgangsverwaltung beendet eval gt ARBEITSPLAN gt 174 KAPITEL 2 KONSTRUKTIONEN 0 Uber die Investition Lagerhalle West entscheiden Mietvertrag erneuern Zeugnis f r den Abteilungsleiter Meier diktieren Budgetplanung f r die Zentralabteilung aufstellen 0 Erl uterung des Programmes Verwalten von Arbeitsvorgaen gen Zur Erl uterung wird angenommen dass beim Aufruf des Programmes Programmcode S 170 das Argument ARBEITSPLAN an eine zir kul re Liste mit drei Elementen gebunden ist Damit ist zun chst die lambda Variable Z_Liste an die zirkul re Liste von ARBEITSPLAN gebunden ber die Applikation von Vorgangsverwaltung Z_Lis te wird die lambda Variable von Vorgangsverwaltung also Zir kulaere_Liste ebenfalls an diese zirkul re Liste gebunden Anders formuliert Der Zeiger Zirkulaere_ Liste weist auf dieselbe cons Zelle wie der Zeiger ARBEITSPLAN Unterstellen wir nun dass der Benutzer mit der Eingabe Neu
313. eval vector gt list Foo gt 6 eval gt list gt vector A B C gt A B C 2 3 ABBILDUNGSOPTION VEKTOR 217 Konstruktoren eval gt vector lt ebh gt lt eli gt lt el j gt lt eh gt gt lt werto gt lt werti gt lt wert gt lt Wert gt eval gt make vector k gt eval gt make vector k lt init sexpr gt gt lt value gt lt value gt mit lt el gt j te Element des Vektors lt wert gt Wert von lt el gt vector und make vector evaluieren ihre Argumente Notation f r einen Vektor k Anzahl der Elemente lt init sexpr gt Initialausdruck f r die generierten Elemente lt value gt Wert von lt init sexpr gt Selektor eval gt vector ref lt vektor gt i gt lt wert gt mit i 0 1 vector length lt vektor gt 1 Das erste Element hat den Index 0 Das letzte Ele ment hat den Index der um 1 verminderten Vek torl nge vector ref ist zero based Pr dikat eval gt vector lt sexpr gt gt t Falls ein lt sexpr gt ein Vektor ist sonst Mutator eval gt vector set lt vektor gt i lt sexpr gt gt lt neue wert gt mit lt neue werti gt Das Element i hat den Wert von lt sexpr gt Die folgenden Beispiele verdeutlichen diese vector Konstrukte eval gt define V001 vector Reppenstedt 21391 04131 63845 eva
314. eval gt putprop Verbrauch Trend lambda Konto map lambda x 100 x getprop Konto Buchungen eval gt define Trend lambda Konto getprop getprop Konto Konto Typ Trend Konto eval gt Trend K001 gt 22 0 33 0 eval gt Trend K002 2 3 110 130 200 Abbildungsoption Vektor LISP Systeme erm glichen neben der Definition von Listen auch die De finition von Vektoren Dabei ist ein Vektor eine modifizierbare Struktur Den Elementen dieser Strukur ist ein Index vom Typ ganzzahlige po sitive Zahl Integer Zahl zugeordnet Die Vektorelemente k nnen von 216 KAPITEL 2 KONSTRUKTIONEN beliebigem Typ sein also auch wieder Vektoren Z B ist ein zweidimen sionales Feld engl array ein Vektor mit Vektoren als Elemente Die Lange eines Vektors ist gegeben durch die Anzahl der Elemente die er enth lt Sie wird zum Zeitpunkt der Vektordefinition festgelegt Im Gegensatz zur Liste ist der Vektor daher eine statische Abbil dungsoption Ein Vektor hat eine signifikant andere Zugriffszeit Charak teristik als eine Liste Die Zugriffszeit ist konstant d h sie ist unabh gig davon ob auf ein Element am Anfang kleiner Index oder am Ende des Vektors gro er Index zugegriffen wird Bei der Liste steigt die Zugriffs zeit linear mit der Position des gesuchten Elementes wenn sie klassisch implementiert ist Abschnitt A S 457 Zun chst er rtern wir eingebaute Vekt
315. expr gt Evaluiert zu einem Objekt Wir k nnen z B somit auch direkt auf den Slot Name Inhaber zu greifen eval gt get field Name Inhaber A001 gt Hinrich Bonin Im Sinne der Denkwelt der Objekt Orientierung ist ein Zugriff ber den Methodenaufruf angebrachter also daher eval gt send A001 get Name Inhaber gt Hinrich Bonin 2 8 KLASSE INSTANZ MODELL 333 Exkurs Begriff Messagepassing Im strengen Sinne des Nachrichtenversands verursacht das Senden einer Nachricht an jemanden ein potentiell asynchrones Anworten auf diese Nachricht Beispiel Der Sachbearbeiter sendet seinem Chef eine Nach richt Wann er die Antwort erh lt bestimmt in der Regel der Chef Zwi schenzeitlich kann der Sachbearbeiter andere Aufgaben erledigen Die send Syntax suggeriert dass ein solches asynchrones Antwortverhalten vorliegt In objekt orientierten LISP Erweiterungen bedeutet Nachrichten versand das Heraussuchen einer Funktion und ihre Abarbeitung Der Sen der ist nicht in der Lage zwischenzeitlich etwas anderes zu bearbeiten Er wartet auf die Antwort Senden einer Nachricht f hrt nur zur Applikation einer LISP Funktion Das Klasse Instanz Modell hat als ein wesentliches Merkmal die Ab schirmung Einkapselune der internen Zust nde ihrer Objekte Klas sen und Instanzen gegen Zugriffe von aussen die nicht ber die vorge sehene Schnittstelle laufen Exkurs Begriff Encapsulation Der gew nschte Objektzusta
316. f r Upcase Alphabet und Downcase Alphabet jeweils einen eigenen Thread S 356 Das thread Konstrukt appliziert ein Thunk S 103 d h ein 1ambda Konstrukt ohne Parameter eval gt thread lt thunk gt gt lt thread gt mit lt thunk gt Enth lt eingekleidet in ein lambda Konstrukt ohne Parameter nullstellig die abzuarbeitende Aufgabe Beispiel thread eval gt thread thread lambda Work gt 6 eval gt thread thread lambda display Work gt t Work Deutlich wird an diesem Beispiel dass der Wert des thread Kon struktes nicht der Body Wert des Thunk ist Es bedarf daher eines Ne beneffektes hier mit display wenn der Thread eine Wirkung nach au en zeigen soll eval gt define Alphabet with Threads lambda thread lambda Upcase Alphabet thread lambda Downcase Alphabet end 2 9 KOMMUNIKATION 397 eval gt Alphabet with Threads gt end abcdABCefghijklmnopgrstuvwxyz DEFGHIUKLMNOPORSTUVWXYZ eval gt Alphabet with Threads gt end abcdAefghijklmnopqrBCDEFGHstuvwxyz TJKLMNOPQRSTUVWXYZ Erwartungsgem s ist das Resultat beim mehrmaligen Evaluieren des Konstruktes Alphabet with Threads unterschiedlich Bei der Aus gabe mittels display kommen die beiden nebenl ufig arbeitenden Threads je nach den aktuellen Gegebenheiten jeweils unterschiedlich schnell vorw rts Um diesen Buchstabensalat zu vermeiden und di
317. fasst werden als ist konstruierbar aus Dabei wird eine Wahlm glichkeit im 1 2 KOMBINIEREN VON KONSTRUKTEN 67 BNF Variable Spezifikation lt sexpr gt lt atom gt lt liste gt lt liste gt lt sexpr gt lt atom gt lt symbol gt lt zahlatom gt und weitere Typen z B Zeichen oder Zeichenkette lt symbol gt lt buchstabe gt lt sonderzeichen gt lt symbol gt lt buchstabe gt lt symbol gt lt sonderzeichen gt lt symbol gt lt zif fer gt lt zif fer gt lt symbol gt lt zahlatom gt lt numeral gt lt numeral gt lt numeral gt lt numeral gt jer 2 21 er und weitere Typen z B 12 34 lt buchstabe gt als le se 2 Fey ole z lt sonderzeichen gt ze sll und weitere Typen a gt o 2009 Legende Backus Naur Form Exkurs Abschnitt 1 2 2 S 66 Zeichen hinter einem Semikolon in einer Zeile sind Kommentar lt gt Tabelle 1 10 S 68 Tabelle 1 9 Erorterte Konstruktions Mittel Teil 1 Sinne einer Oder Verkn pfung durch den senkrechten Strich dokumen tiert Eckige Klammern kennzeichnen die M glichkeit das Eingeklam merte weglassen zu k nnen Geschweifte Klammern dokumentie ren dass das Eingeklammerte beliebig oft wiederholt oder aber auch ganz weggelassen werden kann Die Tabellen 1 9 S 67 und 1 10 S 68 definieren auszugsweise ein LISP System es umfasst keinesfalls alle Konstrukte eines
318. ff auf bereits definierte Struturen Neue Strukturen lassen sich aus bestehenden zusammenbauen Vorteilhaft ist dabei dass jeweils die Operationen f r das Zugreifen und ndern der Feldwerte un mittelbar vom LISP System bereitgestellt werden Sie m ssen nicht erst selbst definiert werden Das define struct Konstrukt hat vielf ltige Optionen Ohne Ver erbungsoption und mit etwas Vereinfachung hat es die folgende Syntax Die Vererbungsoption behandeln wir anschlie end Abschnitt 2 6 3 S 314 eval gt define struct lt structure name gt lt slot gt lt slot option gt lt struct option gt mit 310 KAPITEL 2 KONSTRUKTIONEN lt structure name gt Ein Symbol das die Struktur benennt lt slot gt Ein Symbol das das Feld benennt lt slot option gt mutable auto lt struct option gt mutable super super expr inspector inspector expr auto value auto expr guard guard expr property prop expr val exr transparent prefab omit define syntaxes omit define values Als Wunscheffekt werden bei der Applikation des define struct Konstruktes folgende Operatoren generiert e Ein Konstruktor make lt structure name gt e ein Pr dikat lt structure name gt e f r jedes Feld einen Selektor lt structure name gt lt slot name gt und e f r jedes Feld einen Mutator d h die M glichkeit seinen Wert mit Hilfe
319. ftWave LISP 466 INDEX space 242 Sperber Michael 496 Spezifikation algebraische 403 Springer Georg 497 SRFI 14 Stack 78 statische Bindung 47 Steele Jr Guy Lewis 46 390 392 459 488 497 Steele Barbara K 380 497 Stefik Mark 327 488 Stereotyp 422 Steuerungsproblem 406 Storyboard 438 Stoyan Herbert 22 143 239 378 459 460 497 Straaten van Anton 496 Stransfeld Reinhard 489 string 241 string url 352 475 string hash 189 string 241 string 241 string append 243 string length 241 string null 241 string ref 242 string gt symbol 250 267 string gt uninterned symbol 260 struct gt vector 331 substring 243 Summers Phillip D 497 super 339 super new 329 Sussman Gerald Jay 487 Sussman Julie 487 Swartout William R 496 symbol hash 189 symbol gt string 250 Synchronisation 358 System komplexes 447 T Project 466 tail recursion 116 Tanimoto Steven L 114 497 Tatar Deborah G 497 TCP 367 507 Teitelman Warren 497 TELOS 459 Term 36 text 420 Thazhuthaveetil Matthew J 457 495 this 336 338 thread 356 thread wait 364 thread 356 Thunk 103 356 time 354 TLC LISP 466 Touretzky David S 314 497 trait alisa 344 trait exclude 344 trait sum 344 trait gt mixin 346 Transformation Makro 296 Tschritter Norbert 5 Turing A M 28 turn 477 Turner D A 270 490 Turtle Grafik 476 478 turtles 477 UCI LISP 467
320. g 248 KAPITEL 2 KONSTRUKTIONEN string car string Muster cond Simple Match cdr string Muster edr string String t Simple Match Muster cdr string String t Simple Match cdr string Muster string t t t eval gt Simple Match Eine Analyse sichert Eine Analyse sichert Erfolg gt f Kein Element f r das eval gt Simple Match haben Wert Viele Symbole haben einen komplexen Wert gt t eval gt Simple Match Phasenplan bestimmt Vorgehen Der lineare Phasenplan bestimmt das Vorgehen gt Mehr als ein Element f r das eval gt Simple Match Phasenplan bestimmt Vorgehen Der lineare Phasenplan bestimmt das Vorgehen gt t 2 4 3 Symbol und PRINT Name Ein Symbol Literalatom ist eine Einheit mit einer eigenen Identit t S 42 Seine Elementarteilchen sind abh ngig vom jeweiligen LISP System So haben Common LISP Systeme im Gegensatz zu Scheme Sys temen das Elementarteilchen Funktion cell Abbildung 2 20 S 249 Im Mittelpunkt dieses Abschnittes steht das Elementarteilchen PRINT Name Wird ein Symbol eingelesen dann konvertiert ein klassisches LISP System in der READ Phase des READ EVAL PRINT Zyklus Abschnitt 1 1 2 S 20 alle kleinen Buchstaben in gro e Buchstaben So wird z B aus FoO oder 00 jeweils FOO Dies ist ein Kennzeichen f r das Alter von LISP Als LISP Ende der 50er Jahre konzipier
321. g die Abk rzung E auf eine Annahme zum Entwurf und die Abk rzung T auf einen Testfall A1 Aktenverwaltung speichert einen Aktenbestand A1 1 Eine Akte besteht aus einem Aktenzeichen Key und ei nem Erl uterungstext Text A1 2 Ein h henbalancierter Baum AVL Baum repr sentiert den Aktenbestand A2 Ein neuer Key ist in den AVL Baum einf gbar Dabei wird gepr ft ob der Baum ausgeglichen ist falls nicht wird ein neuer AVL Baum konstruiert A3 Ein Text ist durch einen neuen ersetzbar A4 Ein gespeicherter Key ist aus dem AVL Baum nicht l schbar El Jeder Baumknoten ist ein Vektor der Baumh he Key Text und die beiden Teilb ume abbildet lt knoten gt lt hoehe gt lt key gt lt text gt lt linker teilbaum gt lt rechter teilbaum gt E2 Key hat den Typ Zeichenkette A1 1 E3 Text hat einen beliebigen Typ A1 1 228 KAPITEL 2 KONSTRUKTIONEN E4 Zum Ausbalancieren des AVL Baumes beim Einf gen von neuen Aktenzeichen wird eine Key Gleichheit mit dem string ci Konstrukt festgestellt Es gibt daher keine Unterscheidung durch eine Gross Kleinschreibung Z B ist A 1 123 damit gleich fe LZ N E5 Benutzerschnittstelle E5 1 Laden eines Aktenbestandes Aktenverwaltung Start lt datei gt E5 2 Sichern eines Aktenbestandes Aktenverwaltung Ende lt datei gt E5 3 Eingeben Modifizieren einer Akte Aktenverwaltung Eingabe lt key gt lt tex
322. g Konstrukt vollzieht die lokale Funktion Von Analyse Hier ist nur die Anfangsposition der zu selektierenden Zeichenteilkette durch den Zeiger Aktuelle Position zu ermitteln Die Endeposition ist identisch mit der gesamten Zeichenkette sie ist mit dem string leng th Konstrukt bestimmbar Wenn eine Zeichenkette leer ist oder nur eine Zeichenteilkette f r das car string Konstrukt enth lt ist der Wert des cdr string Kon struktes die leere Zeichenkette Im Sinne unseres Verbundes aus Kon struktor Selektor Pr dikat und Mutator erstellen wir die leere Zeichen kette mit dem Konstruktor make string Das make string Konstru kt ist wie folgt definiert eval gt make string lt length gt lt one character gt gt lt sirNng gt lt length gt Eine ganzzahlige nicht negative Angabe der Lange der Zeichenkette Es gibt eine Obergren ze fiir die Lange Z B besteht in PC Scheme die Restriktion and lt 0 lt length gt lt lt length gt 16380 lt one character gt Ein einzelnes Zeichen als F llzeichen f r die Zeichenkette Ist kein Fullzeichen angegeben wird space verwendet lt string gt Eine Zeichenkette mit der angegebenen Lange eval gt make string 5 g gt ggggg eval gt string null make string 0 gt t eval gt make string 2 3 a gt aaaaaa eval gt define strich eval gt make string 4 strich gt Wir definieren damit das cdr string Konst
323. g basierte Simple Match wie folgt zu notieren eval gt Simple Match Eine Analyse sichert Eine zweckmaessige Analyse sichert den Automationserfolg sse PL An die Stelle des Pradikates null f r die Liste tritt das Pr dikat string null das wir auf der Basis der Konstrukte string length und string wie folgt definieren eval gt define string null lambda String and string String string length String 0 eval gt string null gt t eval gt string null 7 gt f Das Pr dikat eq wird durch das eingebaute Pr dikat string er setzt Der Wert des string null Konstruktes ist nur dann ungleich false also true wenn die L nge der Zeichenkette gleich Null ist Das string Konstrukt vergleicht seine beiden Argumente Zeichen f r Zeichen Es hat einen Wert true wenn f r jedes Zeichen Gleich heit gilt und die beiden Zeichenketten gleich lang sind Die folgenden Beispiele zeigen die beiden Pr dikate f r Zeichenketten eval gt string a gt a eval gt string gt eval gt string null string gt t eval gt define Foo 242 KAPITEL 2 KONSTRUKTIONEN eval gt string length Foo gt 1 eval gt string null Foo gt f eval gt string more more gt t eval gt string MoRe more gt eval gt string MoRe MoRe Lange gt Ff ungleich Zum Ersatz der Selektoren car und cdr sind entsprechende Selek toren f r
324. g hervorruft sind nicht zu untersch tzen Im Analysefall sind stets beide Namen zu verfolgen Wir w hlen daher f r selbstdefinierte Mutatoren stets nur einen Namen Beachten wir bei der Wahl eines Namens nicht die Informationsauf teilung mit dem Daten Lexikon und mit weiteren Namen die z B im Zusammenhang mit seiner Anwendung relevant sind dann wird der Na me lang und wir m ssen die damit verbundenen Nachteile Tabelle 3 1 S 380 in Kauf nehmen L sung A S 382 Anzustreben ist eine Rechnerunterst tzung beim Lesevorgang weil damit ein zweckm iger Kompromiss zwischen Namen und Lexikon erreichbar ist Ansatz z B L sung F lt gt S 385 Die Gro Kleinschreibung ist eine geeignete Struk turierungsoption f r den Namen vorausgesetzt es bedarf keiner Flucht symbolnotation Zur Vermittlung konstruktionsbedingter Aspekte ist im Hinblick auf kurze Namen die Verwendung normierter Affixe zweckmals ig L sungen D S 383 und G S 386 3 1 2 Kommentierung Einerseits wissen wir zumindest seit der klassischen Diskussion ber die strukturierte Programmierung Go To Statement Considered Harm ful Dijkstra 1968 50 dass ein undurchschaubarer Quellcode text durch eingef gte Kommentarzeilen kaum transparenter wird Sprin gen wir kreuz und quer d h es liegt eine nichtlineare Kontrollstruktur vor dann kann der Transparenzmangel nicht mit einer Kommentie rung quasi nebenlaufig behoben werden Anderer
325. g trennen wir das Management f r die Konten von der Datenbank die die Menge der Konten enth lt Dazu definieren wir die beiden Module Konten Datenbank und Konten Management wobei der letztgenannte auf dem erstgenannten Modul aufbaut Daher enth lt der Modul Konten Management ein entspre chendes require Konstrukt 322 KAPITEL 2 KONSTRUKTIONEN eval gt module Konten Datenbank scheme provide KONTEN Get Konto Add Konto define KONTEN define Get Konto define Add Konto eval gt module Konten Management scheme provide require Konten Datenbank define struct Konto Um das Beispiel leicht verstehbar zu halten werden die Konten als einfache Assoziationsliste A Liste Abschnitt 2 2 2 S 183 in dem Mo dul Konten Datenbank an das Symbol KONTEN gebunden Au er dem sind nur die beiden Funktionen Get Konto und Add Konto oh ne Pr fung ihrer Argumente implementiert eval gt module Konten Datenbank scheme provide KONTEN Get Konto Add Konto define KONTEN list define Get Konto lambda Konto let k assoc Konto KONTEN cond pair k car k t k define Add Konto lambda Konto set KONTEN cons list Konto KONTEN Fur die Beschreibung des Kontos nutzten wir das define struct Konstrukt Abschnitt 2 6 2 S 309 Die damit verbundenen Konstruk te wie z B make Konto Konto set Konto Kontostand etc sind ber das
326. g von DrScheme Ver sion 4 2 3 Dez 2009 die trait Konstrukte nutzen zu k nnen bedarf es der scheme trait Bibliothek d h eval gt require scheme trait Zum Verdeutlichen der mannigfaltigen M glichkeiten die dietrait Konstrukte bieten definieren wir zwei Traits Kontrolle trait und Gebrauch trait Dabei geht es um die Nutzung der Methode get Gebrauch die in beiden Traits deklariert ist eval gt define Kontrolle trait trait define public get Gebrauch lambda ffentlich define public kontrolliert lambda noch nicht eval gt define Gebrauch trait trait field Gebrauch vertraulich define public get Gebrauch lambda Gebrauch eval gt define Kontrolle Gebrauch trait trait sum trait exclude trait alias Kontrolle trait get Gebrauch get Kontrolle Gebrauch get Gebrauch trait exclude trait alias Gebrauch trait get Gebrauch get Gebrauch Gebrauch 21PLT Scheme http www plt scheme org Zugriff 24 Oct 2009 346 KAPITEL 2 KONSTRUKTIONEN get Gebrauch trait inherit get Kontrolle Gebrauch get Gebrauch Gebrauch define public get Gebrauch lambda string append get Kontrolle Gebrauch get Gebrauch Gebrauch Mit dem Konstrukt trait gt mixin konvertieren wir den Summen Trait in ein mixin Konstrukt das wir dann wie bisher anwenden also mit der Klasse Offener Vorgang S 342 mixen eval gt define Vorgang mixin trait gt mixin Kontro
327. gement verzichten k nnen Vorab wird die Frage diskutiert Welche Vorausset zungen sind zu erf llen damit eine Aussage eine gestaltungsrelevante Anforderung ist Skizziert sind daher Anforderungen an Anforderungen Abschnitt 3 2 1 S 407 Ihre Strukturierung geschieht durch die Mo dularisierung mit Hilfe der Definition von Import Export Schnittstellen Abschnitt 3 2 2 S 411 3 2 1 Anforderungen an Anforderungen Funktionale Anforderungen bedingen dass es sich um Aussagen ber ein System handelt Auch ohne Definition vermittelt der Begriff System die Intention Mannigfaltiges als Einheit zu betrachten Ein System ist daher abgrenzbar von seiner Umwelt und hat Bestandteile zwischen denen Wechselwirkungen Interaktionen stattfinden Diese Merkmale sind als Pr dikat wie folgt formulierbar eval gt define System lambda X and Abgrenzbare Einheit gegen ber der Umwelt X Gliederbar in elementare Bestandteile X Interaktionen zwischen Bestandteilen X Eine funktionale Anforderung beschreibt eine vom System zu erf l lende Leistung bzw eine quantiative oder qualitative Eigenschaft Sol che Aussagen erf llen daher folgendes Pr dikat eval gt define Anforderung lambda Aussage and Spezifiziert System Aussage Or Spezifiziert zu erf llende Leistung Auassage Spezifiziert quantitative Eigenschaft 408 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Aussage Spezifiziert qu
328. gen Wir k nnen drei Arten von Namen unterscheiden 1 Importnamen Dies sind Namen die in anderen Moduln definert sind und im vor liegenden Modul genutzt werden 2 Exportnamen und Dies sind Namen die falls Bedarf besteht von anderen Moduln genutzt werden k nnen 3 Interne Namen Dies sind Namen nur f r den internen Gebrauch im vorliegenden Modul 2 7 1 Import und Exportnamen Die Import und Exportnamen bilden die Schnittstelle des Moduls Sie sind die Grundlage um die Modularisierung einer komplexen Aufgabe zu spezifizieren N heres Abschnitt 3 2 2 S 411 Module k nnen in einer Hierarchie angeordnet werden Entsprech end dieser Struktur sind ihre Namen verf gbar Nicht zugreifbar sind Namen f r Module auf h herer Ebene w hrend umgekehrt der Zugriff von tieferen Ebenen entlang der Hierarchie nach oben erfolgen kann Module bilden damit sogenannte Blockstrukturen wie sie erstmals in ALGOL Akronym f r ALGOrithmic Language realisiert wurden Anhand des Beispiels Kontenverwaltung er rtern wir das Verpacken von Sym bolen mittels des PLT Scheme DrScheme Modul Konzeptes Zur Einf hrung in das Modul Konzept betrachten wir vorab das ein fache Beispiel nodule Termin Das require Konstrukt dient zum Importieren das provide Konstrukt kennzeichnet das zum Import Be reitgestellte eval gt module Termin lib scheme require lib scheme date ss provide heute date gt string define heute
329. generierten Konstruktor make Verwahrkonto definieren wir das Konto V001 eval gt define V001 make Verwahrkonto 3 Meyer D 21399 L neburg Unbekannt Krause eval gt V001 gt Struct Verwahrkonto 3 Meyer D 21399 Luneburg 0 0 0 Unbekannt Krause eval gt Verwahrkonto V001 gt t eval gt Konto V001 gt t Da ein Verwahrkonto z B das Konto V001 alle Felder der Struk tur Konto durch Vererbung aufweist entspricht es sowohl der Struktur Konto wie der Struktur Verwahrkonto Beide generierten Pr dikate Konto und Verwahrkonto haben f r V001 den Wert t VO001 ist sowohl vom Typ Konto wie vom Typ Verwahrkonto Wir haben mit dem define struct Konstrukt eine Typhierarchie konstruiert Ab bildung 2 21 S 316 eval gt and Konto V001 Verwahrkonto V001 gt t Mit der Definition der Struktur Konto wurden die zugeh renden Se lektoren Zugriffsoperationen generiert Diese Zugriffsoperationen wer den nicht vererbt Wir k nnen f r Konten der Struktur Verwahrkonto die Selektoren der Eltern Struktur Konto verwenden allerdings nur unter der Bezeichnung der vererbenden Struktur wie das folgende Bei spiel zeigt eval gt Verwahrkonto Bearbeiter V001 gt Krause 316 KAPITEL 2 KONSTRUKTIONEN m e A voo1 voo2 vm Legende Foo lt Bar Erbungsrichtung d h Bar erbt Felder und Operationen Pr dikate Selektoren und Mutatoren von Foo
330. get pure port string gt url http www hegb de eval gt define Content lambda let zeile read line MyInput Port cond eof object zeile close input port MyInput Port zeile t display zeile newline C ntent eval gt Content gt lt DOCTYPE html PUBLIC W3C DTD XHTML 1 0 Strict EN http www w3 org TR xhtml1 DTD xhtml1 strict dtd gt lt html xmlns http www w3 org 1999 xhtml1 Lang de xml lang en gt lt head gt lt head gt lt body gt lt body gt lt html gt lt eof gt eval gt MyInput Port gt lt input port www hegb de gt eval gt read MyInput Port gt ERROR read char input port is closed Statt das Konstrukt Content zu definieren hatte wir auch das einge baute Konstrukt display pure port nutzen konnen Allerdings ver deutlicht Content besser die End of File Abfrage mittels eof object und die Notwendigkeit den Port wieder zu schlie en Beispiel module Transfer Der folgende Modul Transfer stellt das Download Konstrukt bereit Damit lassen sich auch pdf Dateien aus dem Netz als Datei lokal spei chern 23 Die entsprechende Datei Transfer ss liegt im Verzeichnis C Dokumente und Einstellungen bonin Anwendungsdaten PLTScheme 4 2 3 collects HEGB 354 KAPITEL 2 KONSTRUKTIONEN Datei aus dem Web auf die Platte laden module Transfer scheme require net url provide Download define Download lambda Web File let
331. gezeichnet wird zu malen 7 7Kinderzeichnung Nikolaus Haus 77 mit funktionaler Turtle Grafik module Nikolaus Haus scheme require graphics value turtles provide Nikolaus Haus 478 ANHANG A LISP SYSTEME Datei Bearbeiten Anzeigen Sprache Scheme Einf gen Hilfe Namenlos define Y Speichern fal Macro Stepper 9 Debugger Syntaxpr fung a Start 8 Stop Kinderzeichnung mit Turtle Grafik module Nikolaus Haus scheme require graphics value turtles provide Nikolaus Haus define Nikolaus Haus lambda x let t turtles 2 x 2 x linke Seite draw x turn 45 linke Dach draw x sqrt 2 turn 90 Willkommen bei DrScheme Version 4 2 3 3m Sprache Module memory limit 512 megabytes gt Nikolaus Haus 150 Abbildung A 5 Turtle Grafik Das Haus des Nikolaus A 3 PLT SCHEME UBERSICHT 479 define Nikolaus Haus lambda x let t turtles 2 x 2 x linke Seite draw x turn 45 linke Dach draw x sqrt 2 turn 90 rechte Dach draw x sqrt 2 turn 90 Schraglinie draw x sqrt 2 turn 225 Grundline draw x turn 225 zum Ausgangspunkt draw x sqrt 2 turna 135 Dachbodenlinie draw x turn 90 rechte Seite draw x Ausgangspunkt turn 180 move x4 3 turn 270 move x 2 t VISIIDI II NIINI IIIT TID Zum Schluss wurde mit den beiden Turtle Grafiken nochmals die Pr gung einer Konstruktion durch das
332. gt define Foo make custodian eval gt Foo gt lt custodian gt eval gt custodian Foo gt t eval gt custodian shutdown all Foo void custodian shutdown all Foo gt Ft eval gt Mit den Mitteln Parameters und Custodians lassen sich Threads be einflussen Bei einer so tiefen Steuerung durch den Programmierer wird h ufig die Frage nach dem Speicherplatz und dessen Verwendung relevant Dazu gibt es ebenfalls Konstrukte z B current memory use oder dump memory stats Ein Beispiel f r die Statistik ber den Speicher zeigt Abbildung 2 25 S 368 2 9 3 Zusammenfassung Kommunikation Die Kommunikation ber das Hypertext Transfer Protocol HTTP ist leicht definierbar denn dazu dient das Port Sytem Port produce and consu me bytes Die HTTP Abbildung erfolgt daher analog zum Arbeiten mit Input und Output Files Fur die Gestaltung von nebenlaufig ablaufenden Programm teil en gibt es ein Threads System Die einzelnen Threads lassen sich synchro nisieren Ein einfacher Mechachnis daf r ist der gegenseitige Ausschluss 32TCP Transmission Control Protocol das dominante Netzwerkprotokoll im Internet 33UDP User Datagram Protocol Transportprotokoll der Internet Protokollfamilie 368 KAPITEL 2 KONSTRUKTIONEN A DrScheme a Begin Dump Begin MzScheme3m lt syntax code gt D 24313 389008 lt application code gt 41770 1722944 lt unary application c 41296 660736 lt binary applicat
333. gt symbol string append begin sleep y symbol gt string name dubios sleep z display name Mit unterschiedlichen Sekundenangaben ftir die Dauer der Wartezeit erhalten wir folgende Ergebnisse Deutlich wird dabei dass mit hohen sleep Werten eigentlich wieder eine sequentielle Abarbeitung erzwun gen wird 360 KAPITEL 2 KONSTRUKTIONEN eval gt Konto Name with Threads 0 0 0 0 0 5 gt AusgabendubioslI eval gt Konto Name with Threads 0 3 0 0 0 5 gt AusgabendubioslI eval gt Konto Name with Threads 0 0 0 3 0 5 gt AusgabenIdubios Mutal Exclusion Bei der Nebenlaufigkeit der Threads wollen wir den simultanen Zugriff auf eine gemeinsame Ressource wie hier die lokale Variable name ver meiden Der kritische Abschnitt ist jeweils die Abarbeitung des Mutators set Dazu nutzen wir einen einfachen Mechanismus zur Synchroni sation genannt Mutex Exclusion deutsch gegenseitiger Ausschluss Beispiel Mehrere Ein und Auszahlungen auf ein Konto Wir nehmen nun an auf einem Konto hier A001 der Klasse Konto sind Ein und Auszahlungen zu buchen Wenn die Deckung fehlt ist eine Auszahlung abzuweisen dazu das Kontobeispiel in Abschnitt 2 8 1 S 329 Zun chst versuchen wir wieder mit dem sleep Konstrukt zu steuern hier Konto Name with Threads S 359 Damit ei ne Einzahlung vor einer Auszahlung erfolgt lassen wir die Auszahlung Methode abheben l nger warten Klasse Konto
334. h die Bedeutung der symbolischen Ausdr cke f r die Abarbeitung durch das LISP System Diese mechanische Semantik ist in dem eval Konstrukt des LISP Systems abgebildet Die Regeln sind daher selbst in LISP formuliert 1 1 EINFUHRUNG HANDHABUNG VON KONSTRUKTEN 21 LISP System READ Phase EVAL Phase PRINT Phase Einlesen eines Anwenden der Endebe Ausgeben des symbolischen Auswertungs dingung ermittelten Ausdruckes regeln erfullt Wertes Zustandsanderung Verlassen des des LISP Systems LISP Systems Nebeneffekte Betriebssystem Legende Der READ EVAL PRINT Zyklus wird h ufig als READ EVAL PRINT Loop kurz REPL be zeichnet lt gt z B 186 Abbildung 1 4 Der LISP Prozess READ EVAL PRINT Zyklus Das Evaluieren st tzt sich auf vier Basisregeln e EVAL Regel 1 Evaluieren von Zahlen Zeichen Zeichenketten und den Wahrheitswerten true bzw false Ist der zu evaluierende symbolische Ausdruck eine Zahl ein Zeichen engl character oder eine Zeichenkette engl string dann ist sein Wert der symbolische Ausdruck selbst Liegt ein Wahrheitswert wahr true oder t oder nicht wahr false oder vor dann ist der Wert der Wahrheitswert selbst allerdings abgebildet in der Standardre pr sentation des jeweiligen LISP Systems Beispiele zur EVAL Regel 1 lt gt Abbildung 1 5 S 22 eval gt 0 gt 0 eval gt 12 34567 gt 12 34567 eval gt a gt a Zeichen engl char
335. h die Nebeneffekte durch die print und read Konstrukte noch nicht zur Ausf hrung kommen Wir haben daher die Bedingun gen als Funktionen definiert und ihren Berechnungszeitpunkt durch den Funktionsaufruf terminiert Programm in Tabelle 1 15 S 83 Die Wertberechnung hier die Abfrage wurde auf den Applikationszeitpunkt verschoben Zur Verschiebung des Zeitpunktes der Wertberechnung eines beliebi gen symbolischen Ausdrucks lt sexpr gt notieren wir diesen lt sexpr gt in nerhalb eines 1ambda Konstruktes das keine lLambda Variablen besitzt Mit dem Evaluieren dieses 1ambda Konstruktes entsteht eine Funktion kurz thunk genannt Hinweis Thunk Eine Funktion definiert f r kein Argument wird als thunk bezeichnet Dieses Wort stammt aus der ALGOL Welt 1 Welche urspr ngliche Bedeu 13 ALGOL Algorithmic Language bezeichnet eine Familie von Programmiersprachen die 104 KAPITEL 1 KONSTRUKTE tung es hatte ist unbekannt Es gibt nur scherzhafte Interpretationen wie den Verweis auf Registerger usche Zum gew nschten Zeitpunkt applizieren wir thunk unsere Funkti on und veranlassen damit die Wertberechnung Die Kombination von Funktionsdefinition Lambda Konstrukt und Funktions Applikation im plizites oder explizites appl y Konstrukt bewirkt die Zeitpunktverschie bung der Wertberechnung eval gt lt value gt also der Wert von lt sexpr gt wird jetzt berechnet define Foo lt sexpr gt eval
336. h Foo berpr ft eval gt module Foo scheme provide contract Guthaben and c number positive define Guthaben Alles klar eval gt module Bar scheme require Foo provide contract Umsatz positive define Umsatz 2 Guthaben eval gt require Bar gt ERROR Foo broke the contract and c number positive on Guthaben expected lt and c number positive gt given Alles klar In der Praxis geschieht das Spezifizieren der Moduln zun chst ske lettartig mit lose verkn pften verbalen Beschreibungen und Absichts erkl rungen Darauf folgt eine Phase der Konsolidierung in der Schnitt stellen und Implementationans tze verbindlich vereinbart werden An schlie end sind diese Beschreibungsrahmen Skelette auszuf llen Das Ausf llen kann mehr oder weniger lokal sequentiell erfolgen Er forderlich ist allerdings die Bezugnahme auf andere bereits teilweise erstellte Skelette In Anlehnung an das Import Export Konzept von PLT Scheme wird dazu folgender Beschreibungsrahmen der die Aufgabe einer Checkli ste hat empfohlen module lt name gt lt initial import gt lt interface gt define effects lt text gt lt modul functions gt mit lt name gt Mnemotechnisch pr gnanntes Symbol das sich von allen anderen unterscheidet lt initial import gt Import der Grundlage hier oft scheme lt interface gt Schnittstelle zu M
337. h nicht fi eval gt Frage gt if gt T 0 begin display Alles klar begin display Doch nicht eval gt define I 3 eval gt eval Frage gt Alles klar eval gt define I 0 Doch nicht II II V define I 3 define Foo P Code while lt I 6 do display I newline set I I 1 od eval gt eval Frage eval gt eval gt eval gt Foo gt letrec g873 lambda cond lt I 6 display I newline set I I 1 eval gt eval Foo Ol BR US t 2 4 5 Zusammenfassung Explode Implode und gen sym Die Zeichenkette engl string kann mit einer Vielzahl spezieller Kon strukte z B make string substring oder string ref bearbei 2 4 ABBILDUNGSOPTION ZEICHENKETTE UND SYMBOL 267 tet werden In Bezug zur Liste tritt an die Stelle des Pr dikates null ein Pr dikat string null auf der Basis von string length Das Pr dikat string entspricht der equal Pr fung Ein Symbol auch Literalatom genannt ist eine Einheit mit eige ner Identit t Der PRINT Name ist eines der Elementarteilchen der Ein heit Symbol Er kann durch Nutzung von Fluchtzeichen und auch mit Sonderzeichen konstruiert werden Mit Hilfe von string gt symbol und symbol gt string k nnen die Konstrukte Explode und Implode definiert werden lt gt S 250 falls das LISP System z B PC Scheme die se nicht schon bereitstellt Mit E
338. haengen wie folgt definierbar eval gt define Anhaengen lambda Liste 1 Liste 2 cond null Liste 1 Liste 2 t cons car Liste 1 Anhaengen cdr Liste 1 Liste 2 eval gt Anhaengen 1 2 3 4 5 6 gt 123 45 6 Bisher wurde die Rekursion sowohl als eine iterativ gepragte Formu lierung tail recursion als auch im Zusammenhang mit Verkn pfungs funktionen wie cons oder append er rtert Jetzt diskutieren wir die Re kursion im Hinblick auf geschachtelte Aufrufe Komposition Der rekur sive Bezug wird als Argument eines schon rekursiven Funktionsaufrufes formuliert Dazu dient wieder die Funktion Umdrehen jedoch wird die se nicht mehr mittels append definiert Der L sungsansatz geht von folgenden berlegungen aus 1 Enth lt die umzudrehende Liste kein Element dann ist die leere Liste die L sung 2 Enth lt die umzudrehende Liste nur ein Element dann ist sie selbst die L sung 3 Ist die Liste x z B A B C D umzudrehen dann ist das letzte Element der Liste hier D an den Anfang einer Liste zu setzen de ren weitere Elemente die umgedrehte Restliste hier das Umdrehen von A B C ist A Das letzte Element einer Liste x ist selektierbar durch eval gt car Umdrehen cdr x gt D letzte Element von x 5 Gesucht ist die rekursive Definition welche die Liste x ohne ihr letztes Element hier D als Wert hat 130 KAPITEL 1 KONSTRUKTE Die folgende rekursive Definition
339. haft Mat ch Value den von der Mustervariablen abgedeck ten Wert an ein namensahnliches Symbol dessen PRINT Name nicht das Kennzeichen bzw aufweist Da der Stern f r mehrere Symbole im Pr fling steht fassen wir unter der Eigenschaft Match Value alle ab gedeckten Elemente zu einer Liste zusammen Das folgende Beispiel hat die beiden Mustervariablen Wer und Was eval gt Mustervergleich Wer begruenden Was Regeln begruenden einen Stil der Programmierung ses Ft eval gt getprop Wer Match Value gt Regeln eval gt getprop Was Match Value gt einen Stil der Programmierung Wie das Beispiel verdeutlicht ist aus dem Namen einer Musterva riablen der Name des zugeh renden Symbols f r die Wertebindung zu selektieren So ist aus der Mustervariablen wer der Teil Wer und aus der Mustervariablen Was der Teil Was zu ermitteln Dazu verwenden wir das folgende Explode Konstrukt Es hat als Wert eine Liste von Einzeichensymbolen die den PRINT Namen seines Arguments repr sen tieren Das Gegenst ck zum Explode Konstrukt ist das Implode Kon strukt Es verlangt eine Liste und baut daraus den PRINT Namen des Symbols Diese Konstrukte basieren auf den Konstrukten symbol gt string und string gt symbol eval gt define Explode lambda Symbol letrec String symbol gt string Symbol Laenge string length String Sprengen lambda tring Position cond Laenge 0 f Laenge Position
340. he Bestandteile der Software Jede Aussage in jedem Dokument hat sich nach den Adressaten und dem Zweck zu richten 398 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Das Baukasten Konstruktionsprinzip bedingt dass Formulierungen mehrfach verwendbar sind Daher sind z B Anforderungen im Prasens zu formulieren Der Name eines Konstruktes z B einer Funktion eines Makros oder einer Variablen ist abh ngig vom gew hlten Paradigma Einerseits ver weist er auf das repr sentierte reale Objekt und andererseits transpor tiert er konstruktionsspezifische Informationen Letztere lassen sich gut mit einer Affix Konvention verschl sseln Bei der Benennung einer Funk tion ist stets die Informationsaufteilung mit anderen Namen lambda Variablen und dem Eintrag im Daten Lexikon zu bedenken Kommentarzeilen im Quellcodetext dienen prim r zur Warum Erl u terung Mit einer verbindlichen Regelung ist festzulegen worauf sie sich beziehen und welchen Textbereich ihre Erkl rung umfasst Vor und R ckw rtsverweise verbessern die Dokumentations Eigen schaften Modifizierbarkeit Zur ckf hrbarkeit und Handhabbarkeit Dazu ist jedes Dokument und jede Aussage in einem Dokument mit eindeuti gen Bezeichnern zu versehen Charakteristisches Beispiel f r Abschnitt 3 1 Hinweis PLT Scheme Zur Nutzung der Eigenschaftsliste P Liste Abschnitt 2 2 3 S 191 la den wir vorab compat ss bei blicher Installation also die Datei C Programme plt
341. hen Y else Z fi Sexpr let Praedikat getprop X Match Value Body Liste 1 getprop Y Match Value 2 4 ABBILDUNGSOPTION ZEICHENKETTE UND SYMBOL 265 Body Liste 2 getprop Z Match Value list IE Praedikat cons begin Body Liste 1 cons begin Body Liste 2 Mustervergleich if X then Y fi Sexpr let Praedikat getprop X Match Value Body Liste getprop Y Match Value liste IE Praedikat cons begin Body Liste list Mustervergleich while X do Y od Sexpr let Symbol gensym Praedikat getprop X Match Value Body Liste getprop Y Match Value list letrec list list Symbol list lambda null list cond append cons Praedikat Body Liste list list Symbol t t list Symbol Mustervergleich do Y until X od Sexpr let Symbol gensym Praedikat getprop X Match Value Body Liste getprop Y Match Value list letrec list list Symbol append cons lambda cons null Body Liste list list cond list Praedikat list HE list Symbol list Symbol t display 266 KAPITEL 2 KONSTRUKTIONEN Keine P code Transformation fuer display Sexpr Zur Verdeutlichung des P Code Programms hier einige Applikatio nen eval gt define Frage P Code if gt I 0 then display Alles klar else display Doc
342. hine lt gt Abschnitt A 1 S 460 Merkmale Flavor Konzept Abschnitt 2 8 S 327 A 3 PLI Scheme bersicht A 3 1 Systemarchitektur PLT Scheme ist eine m chtige Entwicklungsumgebung Mit DrScheme las sen sich Programme in unterschiedlichen experimentellen Sprachen entwickeln Die Abbildung A 1 S 468 zeigt die hier berwiegend genutz ten Fenster F r die Fehlersuche ist ein leistungsf higes Diagnosewerk zeug Debugger verf gbar Toolbar Zur Analyse von Makros gibt es einen Macro stepper der von der Toolbar aktiviert wird Ein Beispiel zeigt Abbildung A 2 S 469 Mitte der 90iger Jahre gr ndete Matthias Felleisen PLT mit dem Ziel Material mit einer didaktisch fundierten Grundlage insbesondere ei ne einfach handhabbare Entwicklungsumgebung f r Newcomer in der Programmierung bereitzustellen Mit Matthew Flatt kam der Einfluss von 468 ANHANG A LISP SYSTEME A Namenlos DrScheme Datei Bearbeiten Anzeigen Sprache Scheme Einf gen Hilfe Namenlos define Y Speichern a Macro Stepper Debugger Syntaxpr fung A start Z stop Drei Kreise ber einer Linie module Kreise scheme require slideshow vc append 10 hb append 0 circle 50 0 circle 100 0 0 circle 200 0 hline 350 0 0 Willkommen bei DrScheme Version 4 2 3 3m Sprache Module memory limit 512 megabytes Q gt Module w Legende Oberer Rand Too
343. hner vollzogen wird Er unterstellt nur dass seine paradigma spezifische Kombination von Eigenschaften Merkma len und Besonderheiten f r seine Konstruktions Aufgabe zweckm ig und prinzipiell auch effizient ist Praxisrelevant ist f r ihn die Frage Existiert eine paradigma konforme Entwicklungsumgebung welche die spezifischen Konstrukte direkt bereitstellt und ihre Verkn pfung unter st tzt Angenommen es sei eine Konstruktion zu analysieren bei der sich der Konstrukteur einen Rechner vorgestellt hat der Objekte generieren und modifizieren kann die miteinander Nachrichten austauschen In diesem objekt gepr gten Modell werden Abstraktionen durch Klassen und Instanz Definitionen kombiniert mit Vererbungsmechanismen abge bildet Es dominieren daher Konstrukte zur Definition und Modifikati on von anwendungsspezifischen Klassen und Instanzen N heres Ab schnitt 2 8 S 327 W re das gleiche Problem mit einem funktionsge pr gten Modell gel st dann dominierten anwendungsspezifische Funk tionen wobei Abstraktionen durch Funktionen h herer Ordnung abge bildet w ren N heres Abschnitt 2 5 S 270 Offensichtlich erleich tern Kenntnisse ber den angewendeten Denkrahmen das Verstehen ei ner vorgegebenen Konstruktion Der Denkrahmen in welchem wir ein Problem analysieren und un sere Ideen f r seine L sung gewinnen und notieren umfasst zumindest 1 elementare Konstrukte Diese Basiskonstrukte engl primitives stel
344. hst sein Argument G H Foo zu evaluieren daher S gt Wert von G ermitteln Da dieser Wert eine Funktion ist ist zun chst sein Argument H Foo zu evaluieren daher S3 Wert von H ermitteln Da dieser Wert eine Funktion ist ist zunachst sein Argument Foo zu evaluieren daher S4 Wert von Foo ermitteln Dieser sei v Ss v in H bernehmen und Funktionswert H berechnen Dieser Wert Sel w 286 KAPITEL 2 KONSTRUKTIONEN Ss win G bernehmen und Funktionswert G berechnen Dieser Wert sel x S7 x in F bernehmen und Funktionswert F berechnen Dieser Wert sel y Sg y ist der Wert der Komposition Bei jedem Schritt S der Folge S bis Sg steht fest welcher Schritt Si ist d h die Fortsetzung engl continuation der Abarbeitung ist be kannt Befinden wir uns beispielsweise beim Schritt S dann besteht die zuk nftige Abarbeitung in der Applikation der Funktionen G und F Dieses Kontrollwissen ber die Zukunft h tte man gern beim Abar beiten von Ss direkt verf gbar Man k nnte dann z B entscheiden ob es sich lohnt die Zukunft berhaupt abzuarbeiten Ist das Kontrollwis sen als Wert einer Variable speicherbar dann kann man die Abarbeitung sp ter fortsetzen Au erdem ist sie dann beliebig oft wiederholbar Sche me stellt mit dem Konstrukt call with current continuation kurz call cc einen entsprechenden Mechanismus bereit Als Varia ble die an die Zukunft gebunden ist dient die Lambda
345. ht da die beiden vorhergehenden Klauseln alle m glichen F lle abfangen eval gt MURKS 8 Alles klar gt Keine Zahl eval gt MURKS 8 1000 gt Doppelter Gewinn 2000 Fehler mit dem quote Konstrukt Gew nschtes Konstrukt eval gt lambda x y list x y Konto Schulze AG gt Konto Schulze AG Notierte Konstrukte eval gt lambda x y list x y Konto Schulze AG gt ERROR Die Variable Konto ist in der aktuellen Umgebung nicht definiert Die Argumente der anonymen Funktion werden zun chst evaluiert Dabei ist f r Konto kein Wert ermittelbar eval gt lambda x y list x y Konto Schulze AG gt X y Die Argumente des list Konstruktes sind aufgrund ihrer Quotierung Konstanten Sie entsprechen nicht den Werten an die 1 112 KAPITEL 1 KONSTRUKTE die definierten lambda Variablen x und y gebunden werden eval gt lambda x y list x y Konto Schulze AG gt ERROR ES sind keine Symbole als lambda Variablen definiert Durch die Quo tierung von x und y besteht die Schnittstelle des lambda Konstruktes aus Konstanten Diese k nnen keine Symbol Wert Assoziationen abbilden 1 2 5 Zusammenfassung let do und map Wir definieren ein eigenes Konstrukt Programm indem wir eingebaute LISP Konstrukte und oder selbstdefinierte Konstrukte mit einander kom binieren Ob das Konstrukt zweckm ig definiert ist zeigt
346. ht ausformuliert sondern nur als Konstanten an gegeben Zur Ausgabe einer Fehlermeldung nutzen wir das print Kon strukt Es evaluiert sein Argument Um zwei erlauternde Zeichenketten 62 KAPITEL 1 KONSTRUKTE eval gt define Kunde lambda x eq car x Kunde eval gt define Lieferant lambda x eq car x Lieferant eval gt define Kassenkonto lambda x eq car x Kassenkonto eval gt define Neuanlegen lambda operand cond Kunde operand x11 Lieferant operand T21 Kassenkonto operand x31 t print list Operationen fur operand noch nicht definiert gt eval gt Neuanlegen Schulze GmbH gt x21 eval gt Neuanlegen Verwahrung 1 gt x31 eval gt Neuanlegen a bc gt Operationen fur abc noch nicht definiert Legende lt gt Tabelle 1 4 S 56 Tabelle 1 7 Programmfragment Operation Neuanlegen als Konstrukt basis 1 2 KOMBINIEREN VON KONSTRUKTEN 63 Strings und den Wert von operand auszugeben nutzen wir das list Konstrukt Hinweis newline Konstrukt Fur einen Zeilenvorschub in der Ausgabe Konsole gibt es das newline Konstrukt Damit l sst sich leicht das in Programmiersprachen bliche println Konstrukt wie folgt selbst definieren eval gt define println lambda x print x newline eval gt println 1 Zeile println 2 Zeile 1 Zeile 2 Zeile eval gt Bei einem komp
347. ich 384 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN eval gt define Get Firmen Kurzname lambda L Ersatz cond length L 1 cond length Ersatz 1 list ref Ersatz 0 t UNBEKANNTER KURZNAMBE t list ref L 1 eval gt Get Firmen Kurzname Kunde 2 UNBEKANNTER KURZNAME ces Wa Dan Problem 3 Informationsaufteilung zwischen Namen und Lexikon Nachteilig ist insbesondere bei haufiger Applikation der Losung D dass der Name Get Firmen Kurzname mit 19 Zeichen recht lang ist Wir verkurzen ihn daher Zusatzlich prazisieren wir bei der 1ambda Variable Ersatz wofur diese als Ersatz dienen soll Wir nennen sie jetzt Name und verweisen mit dem Sonderzeichen als Prafix auf ihre Aufgabe Sie ist Ersatz f r den Firmenkurznamen wenn dieser in den Kundendaten unbekannt ist L sung E e Verk rzung der Namen von L sung D e Nutzung von Sonderzeichen eval gt define Get F K Name lambda L Name cond length L 1 cond length Name 1 list ref Name 0 t UNBEKANNTER KURZNAME t list ref L 1 eval gt Get F K Name Kunde 2 UNBEKANNTER KURZNAME es Nova Dieses Verk rzen f hrt rasch zu Namen deren Bedeutung sich niemand merken kann Wof r steht F und wof r K In der Praxis ist dann perma nent in einem Daten Lexikon nach der eigentlichen Bedeutung nach zuschauen Das Suchen k nnen wir f r das rechnergest tzte Lesen vereinfachen Mit Hilfe der Eigens
348. ich ent weder aus dem Modul Alternative 1 oder Alternative 2 oder Alternative 3 Der Kreis in der rechten oberen Ecke unterschei det die Selektion von der Sequenz F r die Abbildung bietet sich das cond Konstrukt an Liegt nur eine Selektion zwischen zwei Struktu ren vor ist das if Konstrukt geeignet Programmfragment in Tabel le 1 13 S 79 Anhand der Entscheidungstabelle engl decision table die die Ta belle 1 14 S 82 darstellt er rtern wir die Selektion Eine Entscheidungs tabelle kurz ET besteht aus einem Bedingungsteil und einem Aktions teil Die Bedingungen im Beispiel B1 B2 B3 und B4 werden f r den Selektionsvorgang der Reihe nach auf ihren Wahrheitswert hin gepr ft Die Regeln im Beispiel R1 R2 R7 verkn pfen den Bedingungs teil mit dem Aktionsteil Sie dokumentieren bei welchen Wahrheits werten welche Aktionen im Beispiel Al A2 A5 durchzuf hren 1 2 KOMBINIEREN VON KONSTRUKTEN 81 Legende Gesamt Alternative 1 Atematve 2 ptoratve 2 M A Jackson Notation lt gt 98 Abbildung 1 17 Grafische Darstellung einer Selektion sind Trifft stets nur eine Regel nach Pr fung der Bedingungen zu dann handelt es sich um eine Eintreffer ET andernfalls um eine Mehrtreffer ET z B Abbildung 3 7 S 397 Beschr nken sich die Wahrheitswer te auf Ja Abk rzung J Nein Abk rzung N und Irrelevant Abk rzung dann handelt es sich
349. icht wieder Zeichenketten sein Eine Zeichenkette hat sich selbst als Wert EVAL Regel 1 Abschnitt 1 1 2 S 21 Bisher haben wir daher eine Zeichenkette als Konstante benutzt In diesem Abschnitt konstruieren selektieren und manipulieren wir solche Konstanten Die Zeichenkette ist damit eine eigenst ndige Ab bildungsoption wie die Liste oder der Vektor Als Beispiel dient die Auf gabe zwei Muster miteinander zu vergleichen engl pattern matching Ein entsprechendes Konstrukt realisieren wir zun chst mit der Abbil dungsoption Liste Abschnitt 2 4 1 S 239 Dieses Simple Match Konstrukt arbeitet naturgem mit car und cdr Selektoren Um Zei chenketten vergleichen zu k nnen implementieren wir entsprechende car String und cdr String Konstrukte mit Hilfe der eingebauten string Konstrukte Abschnitt 2 4 2 S 241 LISP Systeme verf gen ber ein gro e Zahl spezieller string Konstrukte Wir wollen hier pri m r den Aspekt Abbildungsoption vertiefen und erw hnen daher nur einige Konstrukte aus dem string Konstrukte Repertoire Im Rahmen des Vergleichs zweier Muster f hren wir Variable engl match variables ein Das so erweiterte Konstrukt Mustervergleich nutzt die Repr sentation des Symbols d h das Ergebnis der PRINT Phase kurz PRINT Name als Informationstr ger Bisher haben wir ein Symbol mit einem Wert oder einer Eigenschaft P Liste verkn pft Der im READ EVAL PRINT Zyklus Abschnitt 1 1 2 S 2
350. iden lambda Variablen Konto_Name und Abbuch ungsbetrag dargestellt Den Nebeneffekt ruft das enthaltene set Konstrukt hervor Wir betrachten im Folgenden die Abbildung 1 12 S 45 um die Sym bol Wert Assoziation und ihre Implementation zu erl utern Fasst man eine Symbol Wert Assoziation als die Benennung eines Wertes auf dann hat das Symbol die Rolle einer Variablen Wir bezeichnen ein Symbol als Variable wenn wir seine Wert Assoziation betonen wollen In Programmiersprachen benennen Variable h ufig Werte Objek te in zwei Schritten z B 39 p 224 Eine Variable verweist auf einen Speicherplatz hier in LOCATIONS Dieser Speicherplatz enth lt umgangssprachlich den Wert pr zise formuliert Den Zeiger der auf den Wert zeigt Gew hnlich sprechen wir verk rzt von dem Wert der Varia blen Wesentlich ist dass es aufgrund dieses zweistufigen Benennungs verfahrens auch zwei Wege f r eine nderung gibt Was die Variable benennt kann wie folgt ge ndert werden 1 Durch Bindung engl binding kann die Variable zu einem ande ren Speicherplatz hier LOCATIONS zeigen 1 1 EINFUHRUNG HANDHABUNG VON KONSTRUKTEN 45 z L Legende 9999 Bezeichnet den Platz der ungebunden entspricht UNASSIGNED Bezeichnet den Wert Objekt der nicht initialisiert entspricht Abbildung 1 12 Zweistufiges Verfahren zur Wert Benennung 2 Durch Zuweisung engl assignment kann ein anderer We
351. ie Leichtig keit mit der die objekt orientierte L sung ihre innere Struktur sch tzt verbirgt wird aber nur ansatzweise erreicht Unstrittig ist aber auch das bei einer Erweiterung der Aufgabe die objekt orientierte L sung ihre berlegenheit demonstrieren kann Nehmen wir z B an es sollte zus tzlich sp ter das Material des Schreibtisches gespeichert werden Mit Hilfe der Vererbungsoption de finieren wir dazu eine Klassse Wood Metal Desk Damit diese Klas se als ihre Oberklasse Desk nutzen kann muss der Modul Desk lt gt S 451 seine Klasse exportieren Wie erweitern daher sein provide Konstrukt wie folgt module Desk scheme provide Desk MyDesk e 3 5 PRIMAR OBJEKT ORIENTIERUNG 453 Rudiment r definieren wir die Klasse Wood Metal Desk folgender ma en eval gt define Wood Metal Desk class Desk init m define Material m super new Damit l sst sich ein entsprechender Schreibtisch definieren eval gt define MyWoodDesk new Wood Metal Desk m Oak w 50 0 4 70 0 h 80 0 d 4 eval gt send send MyWoodDesk get Drawer 0 pull eval gt send send MyWoodDesk get Drawer 0 get Drawn gt eval gt Der exportierte MyDesk ist gesch tzt define MyDesk new Wood Metal Desk m Oak w 50 0 1 70 0 h 80 0 d 4 gt ERROR define values cannot re define a constant MyDesk 3 5 2 Zusammenfassung Prim r Objekt Orientierung In der objekt or
352. ie Abktirzung A auf eine Anforderung die Abk rzung E auf eine Annahme zum Entwurf und die Abk rzung T auf einen Testfall Al Mustervergleich analysiert zwei Listen die Liste Pattern und die Liste Objekt mit dem Ziel Werte f r Match Variable zu be stimmen A2 Pattern kann aus folgenden Symbolen bestehen A2 1 Deckt ein Listenelement im Objekt A2 2 Deckt eine Folge von Listenelementen im Objekt A2 3 lt name gt Deckt ein Listenelement im Objekt und bindet dieses Listenelement unter der Eigenschaft Match Value an das Symbol lt name gt A2 4 lt name gt Deckt eine Folge von Listenelementen im Objekt und bindet diese Folge als Liste unter der Eigenschaft Match Value an das Symbol lt name gt A2 5 lt symbol gt Deckt das gleiche lt symbol gt im Objekt El Konvertierung der Matchvariablen in eine Liste mit 2 Elementen wie folgt Bisi gt El 2 gt El 3 lt name gt gt lt name gt El 3 lt name gt gt lt name gt T1 Beispiel eval gt Mustervergleich X hat wartbare Y Der Entwurf hat eine wartbare Struktur gt t eval gt getprop X Match Value gt Der Entwurf eval gt getprop Y Match Value gt Struktur 256 KAPITEL 2 KONSTRUKTIONEN Programm Mustervergleich mit Mustervariablen Abbildungsbasis Listen eval gt define Mustervergleich lambda Pattern Object letrec Hilfsfunktio
353. ie Werte f r 2011 zu erhalten Die Berechnung der neuen gerundeten Werte kann als wiederholte Anwendung der anonymen Funktion eval gt lambda Betrag round 1 0245 Betrag gt lt procedure gt definiert werden eval gt define Sachmittel Quartalsbedarf W 2011 map lambda Betrag round 1 0245 Betrag Sachmittel Quartalsbedarf W 2010 eval gt Sachmittel Quartalsbedarf W 2011 gt 153675 0 102450 0 81960 0 122940 0 Wir nehmen nun an dass die Quartalswerte f r 2010 f r alle Abtei lungen der Beh rde in folgender Matrix Struktur vorliegen eval gt define Sachmittel Quartalsbedarf 2010 Leitung 10000 10000 10000 10000 Abteilung E 450000 423000 411000 567230 Abteilung T 159000 156000 85000 121300 Abteilung W 150000 100000 80000 120000 Stelle Hamburg 34500 32900 25000 55000 Zur Berechnung der Werte f r das Jahr 2011 sind zwei geschachtelte Iterationen notwendig Es ist ber die 5 Zeilen und die 4 Betragsspalten der Matrix Struktur zu iterieren eval gt define Sachmittel Quartalsbedarf 2011 map lambda Organisation list car Organisation map lambda Betrag round 1 0245 Betrag car cdr Organisation Sachmittel Quartalsbedarf 2010 eval gt Sachmittel Quartalsbedarf 2011 gt Leitung 10245 0 10245 0 10245 0 10245 0 Abteilung E 461025 0 433364 0 421070 0 581127 0 Abteilung T 162896 0 159822 0 87082 0 124272 0 Abteilung W
354. iel L Weinreb COMMON LISP The Language Digital Press 1984 Herbert Stoyan LISP Anwendungsgebiete Grundbegriffe Geschichte Berlin Akademie Verlag 1980 Herbert Stoyan Programmierstile und ihre Unterst tzung durch sogenannte Expertensystem Werkzeuge in Arno Schulz Hrsg Die Zukunft der Informati onssysteme Lehren der 80er Jahre Berlin Heidelberg New York u a Springer Verlag 1986 S 265 275 Herbert Stoyan Jerome Chailloux John Fitch Tim Krumnack Eugen Neidl Julian Padget Towards a LISP Standard in Rundbrief des FA 1 2 K nstliche Intelligenz und Mustererkennung der Gesellschaft f r Informatik e V Bonn Nr 44 Januar 1987 Herbert Stoyan G nter G rz LISP Eine Einf hrung in die Programmierung Berlin Heidelberg New York u a Springer 1984 Phillip D Summers A Methodology for LISP Program Construction from Examp les in Journal of Association for Computing Machinery Vol 24 No 1 January 1977 pp 161 175 Steven L Tanimoto The Elements of Artificial Intelligence An Introduction Using LISP Rockville Maryland 1987 Computer Science Press Deborah G Tatar A Programmers s Guide to COMMON LISB Digital Equipment Corporation Digital Press 1987 Warren Teitelman A K Hartley J W Goodwin D C Lewis D G Bobrow L M Masinter INTERLISP Reference Manual XEROX Palo Alto Research Center 1974 revised October 1974 revised December 1975 The Lisp Co
355. ientierten Denk Welt OO Paradigma wimmelt es von Objekten die in der hier er rterten Auspr gung als Instanzen von Klassen entstehen und sich gegenseitig Nachrichten senden Ihre Klas sen beschreiben die Eigenschaften d h sie definieren passive Objektei genschaften Variablen und aktivierbare Objekteigenschaften Me thoden Aufgrund der LISPischen Dualit t von Daten und Programm k nnen Zustandsvariablen Klassen als Wert haben und damit aktivierbar sein Klassen k nnen ihre Beschreibungen erben und vererben Im Klasse Instanz Modell l sst sich ein Objekt der realen oder er dachten Welt in ein quivalentes Objekt im Modell abbilden blich erweise gelangt so die Semantik der Objektbezeichnung in die tiefen Modellschichten und hilft damit die Durchschaubarkeit Transparenz dort zu verbessern An der Kommunikation zwischen den Objekten k nnen auch an onyme Objekte und anonyme Klassen beteiligt sein wie das folgende 454 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN durchdenkenswerte Beispiel von geschachtelten Klassen mit Vererbungs beziehungen zeigt Charakteristisches Beispiel fur Abschnitt 3 5 Beispiel f r geschachtelte Klassen Version 1 0 module OO scheme provide Level0 define Level0 class object define slot Level0 define LevelI class Level0 define attribute LevelI define LevelII class Levell define instance new class object define fo
356. iert Die formalen Parameter bezeichnet man als lambda Variablen oder als lokale Variablen Die formalen Parameter werden durch Symbole angegeben lt rechenvorschrift gt Sie wird durch Konstrukte bei denen formale Pa rameter an Stellen von Argumenten stehen kon struiert Sie wird auch als Term engl form be zeichnet um zu verdeutlichen dass es ein symbo lischer Ausdruck ist der evaluiert wird Im Zusam menhang mit der Schnittstelle bezeichnet man die Rechenvorschrift als Funktions K rper engl bo dy lt procedure gt Sie ist der R ckgabewert des READ EVAL PRINT Zyklus und repr sentiert hilfsweise das entstande ne Funktionsobjekt d h den Programmcode der durch die Schnittstelle und die Rechenvorschrift definiert ist 1 1 EINFUHRUNG HANDHABUNG VON KONSTRUKTEN 37 Exkurs Begriff Argument Argument ist die Bezeichnung f r Element der Definitionsmenge einer Funk tion Ist f x definiert so nennt man salopp auch die Variable x Argu ment Exakt sind jedoch nur die f r x einzusetzenden Werte als die Argu mente von f zu bezeichnen z B 161 Exkurs Begriff Variable In Programmiersprachen ist die Variable prim r als Gegensatz zur Kon stanten zu sehen Sie ist mit einer Quantit t verbunden die variiert wer den kann In der Mathematik benutzt man den Begriff Variable bei Funk tionen im Sinne eines bestimmten aber anonymen Elements einer Defini tionsmenge z B X sei eine nichtnegative ra
357. iffen wird F r einen d nn besetzten Vektor ist die A Liste eine zweckm ige Alternative Abschnitt 2 2 2 S 183 Charakteristische Beispiele f r Abschnitt 2 3 1 eval gt Verwaltung von Adressen 2 3 ABBILDUNGSOPTION VEKTOR 237 define Adressen Struktur Anrede amp Titel Vorname amp Name Strasse amp Nummer Postfach Landeskenner amp Postleitzahl amp Ortsname eval gt define Privat Adresse lambda Anrede Name Strasse Ort let Adresse make vector vector length Adressen Struktur f vector set Adresse 0 Anrede vector set Adresse 1 Name vector set Adresse 2 Strasse vector set Adresse 4 Ort Adresse eval gt define Krause Privat Adresse Herr Hans Krause Entenweg 7 D 21391 Reppenstedt eval gt define Druck Adresse lambda Adresse let V Laenge vector length Adresse do i 0 i 1 1 V Laenge void cond vector ref Adresse i begin display vector ref Adresse i newline t eval gt Krause gt Herr Hans Krause Entenweg 7 f D 21391 Reppenstedt eval gt Druck Adresse Krause gt Herr Hans Krause Entenweg 7 D 21391 Reppenstedt 238 KAPITEL 2 KONSTRUKTIONEN 2 4 Abbildungsoption Zeichenkette und Sym bol Eine Zeichenkette engl string ist eine Sequenz aus einzelnen Zei chen Elementen Im Unterschied zur Liste oder zum Vektor konnen die Elemente dieser Sequenz jedoch n
358. ige Haufung sinngleicher oder sinn hnlicher Aus dr cke bezeichnet 8 engl dispatch Abfertigung 2 LISP erm glicht diese Attributzuordnung ber die Eigenschaftsliste P Liste Ab schnitt 2 2 3 S 191 die klassische LISP Systeme f r jedes Symbol bereitstellen 3 5 PRIMAR OBJEKT ORIENTIERUNG 449 aus von einer Zielthese und weist deren Zutreffen nach oder im Sinne ei ner Zielsuche d h sie verfolgt einen Weg zum zun chst unbekannten Ziel Anhand der Kontrollstruktur kann die Verkn pfung von Daten und Proze dur mittels der Technik des Mustervergleichs als Vorwartsverkettung und oder als R ckw rtsverkettung erfolgen Exkurs Programming in Logic Aus der Tradition des muster gesteuerten Prozeduraufrufs sind Schritt f r Schritt leistungsf hige regel und logik orientierte Sprachen mit R ck wartsverkettung wie z B PROLOG entstanden 3 5 1 class versus A Liste Wir nehmen als simples Beispiel an es sei ein Schreibtisch Desk mit vier Schubladen Drawers abzubilden Im imperativ gepr gten Paradigma S 449 geht es nun um die passenden Variablen deren Werte Schritt f r Schritt berechnet modifiziert werden Im objekt orientierten Paradigma S 451 hier in der Form des Klasse Instanz Modells Abschnitt 2 8 S 327 geht es um das Senden von Nachrichten an Objekte Instanzen einer Klasse damit entspre chende Methoden Funktionen ausgef hrt werden Die vier Schubladen haben alle die g
359. ige Regeln R2 und R3 2 F lle 3 zweiwertige Regeln R1 R6 und R7 6 F lle 2 vierwertige Regeln R4 und R5 8 F lle 5 16 F lle 16 Regeln Tabelle 1 14 Begrenzte Eintreffer Entscheidungstabelle sind formale Vollst ndigkeit Bei einer solchen ET mit 4 Bedingungen sind 16 Regeln notwendig wenn nur die Wahrheitswerte J und N verwendet werden Enth lt die ET Regeln mit Irrelevanz Zeichen dann k nnen diese mehrwertigen Regeln leicht auf mehrere einwertige zur ckgef hrt werden lt gt Tabelle 1 14 S 82 Die ET Auszahlung buchen lt gt Tabelle 1 14 S 82 definiert welche Aktionen in einem aktuellen Fall durchzuf hren sind Um die Daten ei nes aktuellen Falles zu erhalten wird eine einfache Dialogschnittstelle konstruiert Dazu verwenden wir das read Konstrukt und das print Konstrukt Bei einer Antwort N f r die Bedingung B1 ist es nicht mehr ent scheidungsrelevant den aktuellen Wert der Bedingung B2 zu erfragen Es sollten daher nicht die aktuellen Werte aller Bedingungen der Reihe nach abgefragt werden Ist eine Bedingung nicht relevant f r den wei teren Auswahlprozess zur Bestimmung der zutreffenden Regel dann ist sie zu bergehen Anders formuliert Um ungewollte Nebeneffekte hier Abfragen zu vermeiden d rfen irrelevante Bedingungen nicht evaluiert werden Zwei Anwendungsbeispiele f r die in Tabelle 1 15 S 83 definierte ET Auszahlung buchen eval gt ET Auszahlung
360. ildet wird Ublich sind sogenannte vector codierte und structure codierte Abbildungen Das Konzept der Vektorcodierung geht zun chst von einer linearen Liste aus Sie enth lt keine Sublisten d h keines ihrer Elemente ist wie derum eine Liste Die einzelnen Elemente sind dann benachbart als Vek torfelder speicherbar Ist ein Element jedoch wiederum eine Liste dann wird dies als Ausnahme gekennzeichnet Jedes Vektorfeld weist durch einen Zusatz tag aus ob es ein Element enth lt oder eine Adresse die auf einen neuen Vektor verweist oder unbenutzt ist oder das Ende null darstellt Das Optimierungsproblem liegt in der fixen L nge eines Vektors Abschnitt 2 3 S 215 Eine L sung ist das sogenannte cdr coding repre sentation Schema das LISP Maschinen wie z B der Rechner Symbolics 3600 nutzten Hierbei verwendet man cdr codierte Zellen zusammen gesetzt aus einem kleinen cdr Teil und einem relativ gro en car Teil Z B ist der cdr Teil 2 Bits und der car Teil 29 Bits Die vier M glich keiten im cdr Teil sind cdr normal cdr error cdr next und cdr nil cdr next und cdr nil approximieren die Vektorcodierung cdr normal entspricht der klassischen LISP Zelle Eine cdr Codierung mit gr erem cdr Teil kann die Seitengr e der Speicherverwaltung des Betriebssy stems ber cksichtigen z B 49 Das Konzept der Strukturcodierung geht davon aus dass in einer Zelle zus tzlich die Position innerhalb der Liste abgebildet ist Die
361. in einer Umgebung moglich Zahlatome haben sich selbst als Wert stel len aber keine Variable dar Eine Funktion kann daher nicht mit einem Zahlatom benannt wer den Auch die Schnittstelle der eigenen Konstrukte gebildet durch die lambda Variablen erfordert Symbole Zahlatome sind dort nicht ver wendbar Wir stellen fest F r Zahlatome gibt es Restriktionen im Ver gleich zu Literalatomen Symbolen Zahlatomen fehlt die sogenannte first class Eigenschaft Exkurs Abschnitt 1 2 2 S 69 So kann die arithmetische Funktion die den Wert ihres Argumentes um 1 erh ht nicht 1 hei en weil 1 als Zahlatom interpretiert wird Die Umkeh rung dieser Zeichenfolge ist in Scheme ein Symbol Die Funktion ist da her mit 1 benennbar eval gt 1 2 gt 3 1 ist ein Symbol eval gt 1 2 gt ERROR 1 ist kein Symbol eval gt 1 2 gt 3 ist ein Symbol Exkurs Begriff First class Objekt Im LISP Kontext haben Objekte Werte dann first class Eigenschaften auch first class citizen genannt wenn folgende Bedingungen erf llt sind z B 39 p 224 1 Objekte haben eine Identit t Diese ist unabh ngig von jedem Na men unter dem Objekte gekannt werden k nnen So kann ein Ob jekt auch mehrere Namen haben Diese Eigenschaft fehlt Zahlato men 2 Objekte k nnen anonym bleiben Z B evaluiert das 1ambda Kon strukt zu einer anonymen Funktion 3 Objekte k nnen ohne Verlust ihrer Identit t berall gespeich
362. inen eigenst ndigen Den krahmen f r die Problemanalyse und L sungsfindung Ein Muster beschreibt den Typ einer Einheit Beim Vergleich wird entschieden ob ein symbolischer Ausdruck passt d h ob er dieser Typbeschreibung entspricht Ein Muster selbst besteht aus einer linearen Folge von Elementen Das Muster wird von links nach rechts mit dem zu pr fenden symbolischen Ausdruck verglichen Wir nehmen zun chst an dass das Muster und der zu pr fende symbolische Ausdruck Listen sind Die Listenelemente unseres Musters k nnen sein e ein Fragezeichen e ein Stern oder e ein zu erf llendes Kennwort ein sonstiges Symbol Ein Fragezeichen im Muster steht f r ein beliebiges Element im Pr fling Anders formuliert Das Fragezeichen deckt ein Element Der Stern deckt eine Folge von beliebigen Elementen incl einer leeren Folge Er deckt ein ganzes Segment Jedes andere Symbol im Muster deckt nur das gleiche Symbol im Pr fling Ein solch einfacher Mustervergleich kann z B folgende Entscheidungen treffen eval gt Simple Match Eine Analyse sichert Muster Eine zweckmaessige Analyse Pr fling sichert den Automationserfolg k gt HE Ergebnis eval gt Simple Match Eine Analyse sichert Muster Eine zweckmaessige Analyse Pr fling sichert den Automationserfolg gt Hf Ergebnis Fur den Vergleich von Listen definieren wir das Simple Match Konstrukt als eine rekursi
363. ion 40451 lt sequence code gt 11768 lt branch code gt 13424 lt procedure code gt 34918 lt let value code 12630 lt let void code 4512 lt letrec code gt 25 lt let one code gt 19289 lt with continuation m 85 lt global variable cod lt module variable cod lt primitive gt lt primitive closure lt procedure gt D lt procedure gt D lt struct gt lt procedure gt D lt struct gt lt bignum integer Legende eval gt dump memory stats gt Auszug diese Abbildung eval gt current memory use gt 130409780 Bytes Abbildung 2 25 Beispiel Speicherauszug Mutal Exclusion der mit den bereitgestellten Semaphoren einfach rea lisierbar ist Zus tzlich gibt es synchrone und asynchrone Channels zum Austausch von Werten zwischen Threads Charakteristische Beispiele f r Abschnitt 2 9 http Kommunikation eval gt define get Web lambda Adresse letrec MyInput Port get pure port string gt url Adresse Content lambda let zeile read line MyInput Port cond eof object zeile close input port MyInput Port zeile t display zeile newline 2 9 KOMMUNIKATION 369 Content Content eval gt get Web http www zeit de gt lt DOCTYPE HTML PUBLIC IETF DTD HTML 2 0 EN gt lt HTML gt lt HEAD gt lt TITLE gt 301 Moved Permanently lt TITLE gt lt HEAD gt lt BODY gt lt Hl gt Moved Permanently lt Hl gt The do
364. ired init variable name in class Konto eval gt define A002 new Konto id 2 name unbekannt eval gt A001 gt struct object Konto eval gt send A001 get Name Inhaber gt Hinrich Bonin Pradikat Das class Konstrukt erkennt eine Klasse Ob es sich um unsere Klasse Konto oder um eine andere Klasse handelt kann es nicht feststellen Zur Pr fung auf unsere Klasse Konto definieren wir mittels der Umwandelung eines struct Objektes in ein vector Objekt ein ei genes Pr dikat Konto eval gt define syntax rule Konto x and class x eg struct class Konto vector ref struct gt vector x 0 eval gt Konto Konto gt t eval gt define Foo class object super new define i 7 eval gt Konto Foo gt f Neben der Feststellung ob unsere Klasse Konto vorliegt ben ti gen wir ein Pr dikat zur Erkennung einer Instanz dieser Klasse Konto Eine Instanz erkennt das Pr dikat object Auf dieser Basis definieren wir analog zum Konstukt Konto das Konstrukt Konto eval gt object A001 gt t eval gt define syntax rule Konto x and object x eg struct object Konto vector ref struct gt vector x 0 eval gt Konto A001 gt t eval gt Konto new Foo gt f Bei den beiden Pr dikaten Konto und Konto nutzen wir die jeweilige Kennzeichnung struct class Konto und struct ob ject Konto und greifen damit auf Details der Implemen
365. ise e Literaturangaben zum Vertiefen des Stoffes dieses Manuskripts sind vor grauem Hintergrund ausgewiesen e In der Literatur wird LISP nicht immer in Gro buchstaben ge schrieben obwohl es ein Akronym f r List Processing ist Die je weilige Schreibweise ist hier beibehalten 485 486 ANHANG B LITERATUR Literaturverzeichnis 1 2 3 4 51 6 7 8 9 10 11 12 Harold Abelson Gerald Jay Sussman Julie Sussman Structure and Inter pretation of Computer Programs Cambridge Massachusetts u a The MIT Press McGraw Hill 1985 John Allen Anatomy of LISP New York u a McGraw Hill 1978 John R Allen The Death of Creativity in AI Expert San Francisco 2 1987 2 pp 48 61 John R Anderson Robert Farrell Ron Sauers Learning to Program in LISP in Cognitive Science Norwood 8 1984 pp 87 129 John R Anderson Albert T Corbett Brian J Reiser Essential LISP Reading Massachusetts u a Addison Wesley 1987 American National Standard Institute of Electrical and Electronics Engineers Guide to Software Requirements Specifications Standard 830 July 20 1984 John Backus Can Programming Be Liberated from the von Neumann Style A Functional Style and It s Algebra of Programs Communications of the ACM Vol 21 No 8 August 1978 pp 613 641 Avron Barr Edward A Feigenbaum Eds The Handbook of Artificial Intelli gence Volume II Chapter
366. iskutiert Zieht man einen Vergleich zum Bau eines Fahrgastschiffes dann wer den Aspekte der Seet chtigkeit und Sicherheit anhand der Dicke der Stahlw nde gekl rt w hrend die Frage ob es berhaupt gen gend Fahr g ste gibt dabei nicht ber cksichtigt wird Schon diese eingegrenzte Betrachtung des klassischen Lebenszyklus ses lt gt z B 21 zwingt uns permanent zur Entscheidung Ist diese Konstruktion oder eine ihrer m glichen Alternativen zu w hlen 1 2 KOMBINIEREN VON KONSTRUKTEN 5l Anforderungsdefinition Problemanalyse Implementation Konzeptionierung Betrieb amp Testen Wartung Pflege Logischer Entwurf Programmierung Detailentwurf Legende Problemanalyse Anforderungsdefinition Konzeptionierung logischer Entwurf Detailent wurf Programmierung Testen Implementation Betrieb amp Wartung Pflege bilden einen Zyklus Abbildung 1 13 Lebenszyklus Skizze des Produktes Software Beispiel Entscheidung f r eine L sung In einem Programm zur Verwaltung von Kunden sei zu berpr fen ob vorab die Frage nach dem Namen und dem Alter des Kunden beantwor tet wurde Welches der beiden Programmfragmente ist zu bevorzugen und warum L sung 1 eval gt define a t Anwort des Namens eval gt define b f gt B Antwort des Alters eval gt define foo lambda x y if x y f eval gt foo a b gt E L sung 2 eval gt define Antwort Name true eval gt define Ant
367. ispiel eval gt define F 1 Bilde Formular Leuphana Bescheid Stand Entwurf eval gt Get Text F 1 gt Bescheid eval gt Get Fuss Set Fuss Stand Genehmigt F 1 gt Stand Genehmigt 2 2 Abbildungsoption Liste Fur die Abbildungsoption Liste haben wir bisher den Konstruktor cons die Selektoren car und cdr sowie die Pr dikate null und pair in unterschiedlichen Zusammenhangen genutzt Es wurden z B neue Listen erzeugt Elemente am Anfang einer Liste eingef gt Listen an einander gekoppelt die Reihenfolge der Elemente umgedreht oder die Lange einer Liste bestimmt Wir konnen die Liste im Sinne einer Signatur Abschnitt 1 1 4 S 32 mit diesen Operationen definieren Abbil dung 2 2 S 161 Dabei unterstellen wir eine endliche nicht zirkul re Liste Vergleicht man das Konzept der Liste mit dem der Menge dann sind zwei Aspekte bedeutsam 1 die Ber cksichtigung der Reihenfolge und 2 das mehrfache Vorkommen gleicher Elemente Multiplizit t Die Liste ist ein Konzept mit Reihenfolge und Multiplizit t Die Menge engl set ist ein Konzept ohne Reihenfolge und ohne Multiplizit t Kon zepte ohne Reihenfolge aber mit Multiplizit t werden bags oder multi sets genannt z B in Smalltalk 73 F r den Selektor l sst sich Multiplizit t auch mit Hilfe einer zir kul ren Liste simulieren Bei ihr ist der Nachfolger des quasi letzten Elementes das erste Element der Liste Die Katze bei
368. isplay Vorgangsverwaltung beendet Zirkulaere Liste Der R ckgabewert des Programmes Verwalten von Arbeits vorgaengen ist dann stets der Zeiger Zirkulaere_Liste so dass dann formuliert werden k nnte eval gt begin set ARBEITSPLAN Verwalten von Arbeitsvorgaengen ARBEITSPLAN t gt t Hinweis Makro Nutzung Einerseits ist diese umst ndliche Formulierung mit der zweimaligen Nen nung von ARBEITSPLAN durch die Definition eines Makros syntaktisch vereinfachbar Andererseits k nnte ARBEITSPLAN direkt und nicht ber die lambda Schnittstelle des Konstruktes Verwalten von Arbeits vorgaengen modifiziert werden z B durch die Konstruktion des Programms Aktenverwaltung Programmcode S 229 Wie die Abbildungen 2 6 S 175 bis 2 10 S 180 dokumentieren ver ndert das Konstrukt Verwalten von Arbeitsvorgaengen die cons Zellen seines Argumentes Hier ist gerade diese Modifikation der gew nschte Effekt In anderen F llen allerdings ist sicherzustellen dass die cons Zellen eines Argumentes nicht ver ndert werden Haben wir 180 KAPITEL 2 KONSTRUKTIONEN set cdr Quasi letzte Element Zirkulare_ Liste Listenzeiger cdr Zirkul re_ Liste aktueller Zeiger cdr Zirkul re_Liste vorhergehende Position cdr Zirkulare_Liste ARBEITSPLAN gt 0 0 0 Zirkulaere_Liste Element _1 Element 2 Element 3 Vorhergehende _ Position Aktuelle Zeiger set car Zirkul re_Li
369. iste eroeffnete Knoten und Arbeitsliste befinden Neuberechnen offene Knoten lambda Knoten letrec Neue Wert Entfernung Start Knoten gt Anderer Knoten Analyse Knoten Knoten cond lt Neue Wert 2 2 ABBILDUNGSOPTION LISTE 209 getprop Knoten Entfernung vom Start putprop Knoten Entfernung vom Start Neue Wert putprop Knoten Schaetzung Gesamtentfernung Entfernungsschaetzung Start gt Ziel Knoten putprop Knoten Weg Analyse Knoten set Liste eroeffnete Knoten Einfuegen nach Entfernungsschaetzung Knoten delete Knoten Liste eroeffnete Knoten t Gemeinsame Knoten gibt eine Liste zur ck die nur Knoten enth lt die in 7 Liste 1 und Liste 2 vorkommen Gemeinsame Knoten lambda Liste 1 Liste_2 cond null Liste 1 null member car Liste 1 Liste 2 cons car Liste 1 Gemeinsame Knoten cdr Liste 1 Liste 2 t Gemeinsame Knoten cdr Liste 1 Liste 2 7DLELereng Knoten gibt Liste 1 zurueck ohne die Elemente die in Liste_2 vorkommen Difterenz Knoten lambda Liste 1 Liste 2 cond null Liste 1 mall member car Liste 1 Liste 2 Differenz Knoten cdr Liste 1 Liste 2 t cons car Liste 1 Differenz Knoten cdr Liste 1 Liste 2 Die Eigenschaft Weg verknuepft den Analyse Knoten mit seinen Nachfolgern Ausgabe Weg setzt diese Kette rueck waerts von Ziel Knoten zum Start Knoten als Liste zusamme
370. ittel um in LISP Daten darzustellen Programme AUCH MIR Sin tO le pada ae GLEICHHEIT LOY gn JET DIE FU gee DATEN ASR PA a N 88 3 G 7 A gt 4 s N Q i S Von Bedeutung ist in LISP die Frage ob und wie ein symbolischer Ausdruck evaluiert wird Sie ist entscheidend wenn man eine Untertei lung in Daten und Programm vornehmen will Bei einer Zeichenkette Z B Programmieren ist das Abbilden von Wissen besteht kein Grund diese zu evaluieren weil sie selbst das Ergebnis ist Zahlen Zeichen und Zeichenketten haben eher passiven Charakter sie z hlen zur Kategorie Daten Die Liste ist ambivalent Sie geh rt sowohl zur Kategorie Daten als auch zur Kategorie Programm Das folgende Bei spiel verdeutlicht diese Ambivalenz Beispiel Buchungsprogramm Vom Konto Meyer AG ist ein Betrag von 67 23 abzubuchen Wir for mulieren folgende Liste eval gt Abbuchen Meyer AG 67 23 gt 1200 45 Wir erhalten den neuen Saldo 1200 45 vorausgesetzt es existiert eine Funktion Abbuchen und ein Konto Meyer AG mit dem alten Sal do 1267 68 Das Ergebnis von 1200 45 entstand durch Laufenlassen des Programmes Abbuchen Meyer AG 67 23 http java com de download index jsp Zugriff 1 Feb 2010 30 KAPITEL 1 KONSTRUKTE Diese Liste f hrt zu einer Ausgabe Output indem sie dem READ EVAL PRINT Zyklus ubergeben wird wir mussten sie der Kategorie Programm zuordnen Jetzt wollen wir annehme
371. ive L sung define Maximum Parallel Wert lambda Zahlen Liste Such Liste letrec Max Parallel lambda ZL SL ZL Max SL Max cond null ZL SL Max lt ZL Max car ZL Max Parallel cdr ZL cdr SL car ZL car SL t Max Parallel cdr ZL car Sin ZL Max SL_Max Max Parallel Zahlen Liste Such Liste O null eval gt Maximum Parallel Wert 2 4 1 2 6 LISP ist manchmal sehr nuetzlich gt nuetzlich 136 KAPITEL 1 KONSTRUKTE eval gt Maximum Parallel Wert 2 5 1 3 LISP ist manchmal sehr nuetzlich gt ist Beispiel Erganzung einer bestehenden Assoziationsliste eval gt define Ergaenzung A Liste lambda Liste Keys Liste Werte A Liste cond and null Liste Keys null Liste Werte A Liste null Liste Keys Ergaenzung A Liste list Liste Werte A Liste null Liste Werte Ergaenzung A Liste Liste Keys list A Liste t cons list car Liste Keys car Liste Werte Ergaenzung A Liste cdr Liste Keys cdr Liste Werte A Liste eval gt Ergaenzung A Liste Emma Hans Karl verheiratet ledig Otto verwitwet Hans ledig gt Emma verheiratet Hans ledig Karl Otto verwitwet Hans ledig Beispiel Bestimmung der Schachtelungstiefe eval gt define Struktur Tiefe lambda Liste cond null Liste 1 not pair Liste 0 t apply max map Struktur Tiefe Liste 1 1
372. ive lokale Funktion bernehmen F r das Verstehen zum Zweck der Portierung mag das Durcharbei ten der Quellcodetexte beginnend von der ersten Zeile bis zum Schluss erfolgreich sein Handelt es sich jedoch um ein komplexes Programm System dann ist f r das Verstehen die sequentielle Betrachtung Von Anfang bis Ende des Textes selten hilfreich Zumindest sind in der all t glichen Programmierpraxis schon aus Zeitgr nden nicht alle Konstruk te in Notationsreihenfolge analysierbar Das Verfolgen aller m glichen Pfade die sich aufgrund der Steuerungskonstrukte ergeben scheidet wegen ihrer gro en Zahl aus Die Bew ltigung der Komplexit t bedingt dass wir uns an Abstraktionsebenen orientieren 2 1 2 Verbund von Konstruktor Selektor Pr dikat und Mutator Ein komplexes Konstrukt setzt sich aus einfacheren Konstrukten zusam men In der Abbildung 2 1 S 149 besteht das Konstrukt K 1 aus den Konstrukten K 2 und K 3 wobei der Exponent hier zur Kennzeich nung des Zerlegungsgrades dient Die analytische Betrachtung ist durch eine an der Synthese orientier ten Betrachtung zu erg nzen Das Konstrukt K 1 ist dann ein Kon struktor der die Konstrukte K 2 und K 3 zusammenf gt Damit ein Konstruktor die richtigen Einheiten zusammenf gen kann m ssen die einzelnen Einheiten erkannt werden Ben tigt werden daher pas sende Erkennungskonstrukte engl recognizer Erforderlich ist in un
373. jekt 69 Fitch John 460 497 Fittschen Andreas 492 Fixpunktoperator 278 Flanagan Cormac 469 Flatt Matthew 469 490 496 Flavors 327 Floyd Christiane 373 490 496 Fluchtsymbol 249 INDEX fluid binding 47 Foderaro John K 491 font 420 for each 101 Forgy Charles L 372 491 Form 36 forward chaining 449 FP 270 Fractals 476 Frame 190 frame 473 475 frame 423 Franz LISP 463 Friedman Daniel P 490 491 497 Fuchs N E 373 487 Funktionale Konstante 272 Gabriel Richard P 279 284 390 392 459 460 488 489 491 497 GC LISP 464 generic 339 gensym 196 259 get dc 475 get field 332 get impure port 352 get pure port 352 475 GIE 430 Gorz G nter 22 239 378 497 Goldberg Adele 160 491 Golden Common LISP 464 Goldman Ron 491 Goodwin J W 497 Gordon M 270 491 Grafik Turtle 476 478 graphics turtle 475 graphics value turtle 475 Green Cordell C 489 496 Griss C 494 Griss Martin L 491 494 Gro Eckehard 328 488 Guile 464 Gutierrez Claudio 491 Guttag John 491 Hagiya Masami 498 Hall Patrick J 491 Halstead Jr Robert H 491 492 INDEX Hamann Christian Michael 491 Handke J rgen 492 Harrison III Williams Ludwell 492 Hart Timothy P 193 494 Hartley A K 497 Hasemer Tony 390 491 Hash Tabelle 189 hashtable 189 hashtable contains 189 hashtable entries 189 hashtable
374. jeweilige Paradigma demonstriert hier imperativ gepr gt versus funktional gepr gt O tothe Se nna a Programmieren _ bleibt schwierig ee JAN grekerne 480 ANHANG A LISP SYSTEME Tabellenverzeichnis 1 1 Beispiel Von der leeren zu einer geschachtelten Liste 16 1 2 Verfahren zum Erkennen der Schachtelungstiefe bei Listen 19 1 3 Matrix Operanden Operationen 53 1 4 Programmfragment Kunde Lieferant und Kassenkonto 56 1 5 Programmfragment Selektion des Operanden Typs und der zugeh renden Daten asao e 57 1 6 Programmfragment Erkennen des Operandentyps Kunde 61 1 7 Programmfragment Operation Neuanlegen als Konstrukt basis EEE EEE 62 1 8 Programmfragment Operand Kunde als Konstrukt Basis 64 1 9 Er rterte Konstruktions Mittel Teil 1 67 1 10 Erorterte Konstruktions Mittel Teil 2 68 1 11 Programmfragment Sequenz von Symbolen 70 1 12 Programmfragment Sequenz von Funktionsanwendungen 71 1 13 Programmfragment Sequenz mit begin Konstrukt 79 1 14 Begrenzte Eintreffer Entscheidungstabelle 82 1 15 Programm ET Auszahlung buchen 83 1 16 Programm nm ECK s s s ss Bb S eee eee eee Sas 97 1 17 Programm ET Auszahlung buchen funktional 106 1 18 Programm ET Auszahlung buchen lokale Konstan CCl be ee ee ey ee ee ee ee a ee 107 1 19 Programm Beispiel einer rekursiven Definition
375. kann 2 oder nach Vollzug einer vor Beginn der Iteration festgelegten An zahl von Durchl ufen In vielen Programmiersprachen werden zur Kennzeichnung einer Ite ration Bezeichner wie do while repeat until oder for benutzt In LISP lassen sich entsprechende Konstrukte definieren falls diese im jeweiligen LISP System nicht als eingebaute Konstrukte zur Verf gung stehen Charakteristisch f r LISP ist die Konstruktion einer Iteration in Form einer rekursiven Definition Iterationen k nnen als Spezialf lle der Re 90 KAPITEL 1 KONSTRUKTE Gesamt Wiederholungs Teil Legende M A Jackson Notation 98 Abbildung 1 18 Grafische Darstellung einer Iteration kursion betrachtet werden Rekursive Darstellungen sind f r LISP pr gend z B sind sowohl die Syntax als auch die Semantik der symboli schen Ausdr cke rekursiv definiert Abschnitte 1 1 1 S 15 und 1 1 2 S 20 Wegen ihrer gro en Bedeutung ist der Rekursion in diesem Kapi tel ein eigener Abschnitt gewidmet In LISP unterscheiden wir im Zusammenhang mit Wiederholungs strukturen drei Abbildungskonzepte 1 die blichen Iterationskonstrukte z B das do Konstrukt 2 die Anwendung von map Konstrukten mapping functions und 3 die Iteration als Spezialfall der Rekursion Zun chst behandeln wir als bedingte Wiederholung das do Konstrukt Nach diesem vielf ltig nutzbaren Iterationskonstrukt wird die klassi sche Iteration mit map Konstrukten
376. key Baum cond leerer Baum Baum Baum string ci key Baum Key Baum Baum string ci lt key Baum Key Baum get key AVL Baum key linker Teilbaum Baum string ci lt Baum Key Baum key get key AVL Baum key rechter Teilbaum Baum 2 3 ABBILDUNGSOPTION VEKTOR 231 t display Fehler bei get key AVL Baum display Baum get minimum key AVL Baum lambda Baum cond leerer Baum Baum Baum leerer Baum linker Teilbaum Baum Baum t get minimum key AVL Baum linker Teilbaum Baum get maximum key AVL Baum lambda Baum cond leerer Baum Baum Baum leerer Baum rechter Teilbaum Baum Baum t get maximum key AVL Baum rechter Teilbaum Baum get next key AVL Baum lambda key Baum cond leerer Baum Baum Baum string ci lt key Baum Key Baum Let Clete get next key AVL Baum key linker Teilbaum Baum cond leerer Baum l teil Baum t 1 teil string ci key Baum Key Baum get minimum key AVL Baum rechter Teilbaum Baum string ci lt Baum Key Baum key get next key AVL Baum key rechter Teilbaum Baum t display Fehler bei get next key AVL Baum display Baum AVL Baum montage lambda Baum 1 Teilbaum r Teilbaum let 1 hoehe Baum Hoehe 1 Teilbaum r hoehe Baum Hoehe r Teilbaum knotenbildung lambda key text 1 Baum r_ Baum Make Baum 1 max Ba
377. ktion gt lt arg gt lt argn gt gt lt value gt eval gt apply lt funktion gt lt arg gt lt ar8gn gt gt lt value gt Wir k nnen daher auch formulieren eval gt Applikation einer anonymen Funktion apply lambda Alter_Saldo Abbuchungsbetrag Alter Saldo Abbuchungsbetrag 110 00 50 007 gt 60 eval gt Applikation der gt benannten Funktion Abbuchen apply Abbuchen 110 00 50 00 gt 60 Das explizit notierbare Applikationskonstrukt hat folgende Struktur eval gt apply lt funktion gt lt argumentenliste gt gt lt value gt Das apply Konstrukt evaluiert seine beiden Argumente d h sowohl den Ausdruck lt funktion gt als auch den Ausdruck lt argumentenliste gt Die Evaluierung von lt argumentenliste gt muss zu einer Liste f hren Die Elemente dieser Liste sind die Werte an welche die lambda Variablen von lt funktion gt gebunden werden und zwar in der genannten Reihen folge eval gt define Vorgang 1 110 00 50 00 eval gt apply Abbuchen Vorgang 1 gt 60 40 KAPITEL 1 KONSTRUKTE Exkurs Mehrere Argumente Bei dem Ausdruck lt f gt lt sexpr gt sei lt f gt eine Funktion und der Wert von lt sexpr gt die Liste L Ist lt f gt f r ein Argument definiert dann wird lt f gt auf L angewendet Ist lt f gt jedoch f r mehrere Argumente definiert und sollten deren Werte durch die Elemente von L dargestel
378. ktion AAA eval gt define I 0 gt I eval gt define AAA EUR Namensgleiche globale Variable eval gt define Foo P Code do display I display AAA newline set I I 1 until gt I 3 od eval gt Foo gt letrec AAA lambda display I display AAA newline set I I 1 cond gt I 3 t AAA AAA eval gt eval Foo gt Achtung O lt procedure AAA gt Ungewollter Nebeneffekt 2 4 ABBILDUNGSOPTION ZEICHENKETTE UND SYMBOL 1 lt procedure AAA gt Gewunschte Losung 2 lt procedure AAA gt vgl Fall 1 3 lt procedure AAA gt t 263 Im P Code Konstrukt Programm S 264 ist das Symbol f r die lokale rekursive Funktion mit Hilfe des gensym Konstruktes konstru iert Selbst in dem ung nstigsten Fall d h der PRINT Name dieses ge nerierten Symbols ist gleich mit dem PRINT Namen eines eingelesenen Symbols besteht keine Referenz zu diesem anderen Symbol Der Fall 3 zeigt eine solche schwer durchschaubare Situation Zu einem ungewoll ten Nebeneffekt kommt es jedoch nicht Fall 3 Symbol f r die Funktion mit gensym generiert eval gt define I 0 eval gt define 9794 EUR Zuf llige PRINT Namensgleichheit mit dem anschlie end generierten Symbol eval gt define Foo P Code do display I display 9794 newline set I I 1 until gt I 3 od eval gt Foo gt letrec g794 Generiertes Symbol lambda disp
379. l doyer f r LISt Processing Wir nehmen nun an wir h tten die Aufgabe Programmierern die mit anderen Sprachen arbeiten z B mit C oder Java in einem Kurzvor trag f r LISP zu begeistern Unser Storyboard skizziert dazu 7 Slides z B mit der Hervorhebung der LISP spezifischen Dualit t von Daten und Programm F r die Slides dieses Pl doyers definieren wir eine einheitliche Titel zeile mit berschrift der jeweiligen Slide Nummer dem Datum mit Uhr zeit und unserem Logo Letzteres befindet sich als gi Datei S 430 in einem besonderen image Pfad Das Datum mit Uhrzeit l sst sich entsprechend dem folgenden Kon strukt Datum definieren Dabei wird das Datum in der f r Deutschland blichen Form mit Hilfe des Konstruktes date display format aus gegeben eval gt require scheme date eval gt define Datum lambda date display format german date gt string 23 Storyboard Visualisierung eines Konzeptes bzw einer Idee h ufig eine zeichnerische Drehbuchversion 3 4 PRASENTATION SLIDESHOW 439 Nutzliche Produkte entstehen kaum per Zufall Sie erfordern einen sorgsam siehe Vorwort geplanten Herstellungsprozess wenn es gilt sie wirtschaftlich in gew nschter Qualit t termingerecht zu produzieren Legende Beispiel Zitat S 439 Abbildung 3 9 Slide Zitat seconds gt date current seconds Mit Uhrzeit t eval gt Datum gt 21 Januar 2010 13 06 Die scho
380. l gt lt eigen schaft gt und lt wert gt symbolische Ausdr cke stehen die einen entspre chenden R ckgabewert haben Das folgende Beispiel verdeutlicht die Konstrukte zur Eigenschafts liste eval gt define K001 Allgemeine Daten eval gt pair K001 gt f eval gt putprop K001 Ort Reppenstedt eval gt putprop K001 PLZ 21391 eval gt getprop K001 Ort gt Reppenstedt eval gt getprop K001 Strasse gt f eval gt putprop K001 Zufahrt f eval gt getprop K001 Zufahrt gt Achtung Keine Unterscheidung zwischen einer undefinierten Eigenschaft und einer definierten Eigenschaft mit dem Wert In klassischen LISP Systemen lt gt z B 124 wird die P Liste mit verwendet um eine Funktion die das Symbol benennt zu speichern Die Selektion des Funktionswertes eines Symbols entspricht einer An wendung des putprop Konstruktes mit der Eigenschaft value Ab schnitt 2 4 3 S 248 In modernen LISP Systemen ist die Wertzelle von der Zelle f r die P Liste zu unterscheiden So kann ein Symbol in einer Umgebung keinen Wert haben also keinen Eintrag in seiner Wertzelle aufweisen jedoch Eintragungen in seiner P Liste haben Das folgende Beispiel zeigt einen solchen Fall eval gt define Modul P lambda 10In PLT Scheme mit Module compat mzscheme 194 KAPITEL 2 KONSTRUKTIONEN let Schulze P1234 Krause P5678
381. l Intelligence 1975 pp 585 592 Erik Sandwall Programming in an Interactive Environment the LISP Experience Computing Surveys Vol 10 No 1 March 1978 pp 35 71 Mina Jaqueline Schachter Radig Entwicklungs und Ablaufumgebungen f r die k nstliche Intelligenz Arbeitsplatzrechner f r die Wissensverarbeitung in In formationstechnik it 29 Jahrgang Heft 5 1987 S 334 349 Peter Schefe Informatik Eine konstruktive Einf hrung LISP PROLOG und andere Konzepte der Programmierung Mannheim Wien Z rich Bibliographi sches Institut 1985 Peter Schefe K nstliche Intelligenz berblick und Grundlagen Grundle gende Konzepte und Methoden zur Realisierung von Systemen der k nstlichen Intelligenz Mannheim Wien Z rich Bibliographisches Institut 1986 Harald Scheid Bearbeiter DUDEN Rechnen und Mathematik 4 v llig neu be arbeitete Auflage Mannheim Wien Z rich Bibliographisches Institut 1985 E D Schmitter Praktische Einf hrung in LISP LISP die Sprache der k nstlichen Intelligenz Holzkirchen Hofacker 1987 Peter Schnupp Christiane Floyd Software Programmentwicklung und Pro jektorganisation 2 durchgesehene Auflage Berlin New York Walter de Gruyter 1979 Georg Schoffa Die Programmiersprache Lisp Eine Einf hrung in die Sprache der k nstlichen Intelligenz M nchen Franzis 1987 David E Shaw William R Swartout C Cordell Green Inferring LISP Programs from
382. l gt vector V001 gt t eval gt vector ref VO01 1 gt 21391 eval gt vector ref V001 3 gt ERROR vector ref index 3 out of range 0 2 for vector 218 KAPITEL 2 KONSTRUKTIONEN Reppenstedt 21391 04131 63845 eval gt vector set V001 2 01626989027 eval gt V001 gt Reppenstedt 21391 01626989027 eval gt make vector 4 LG LG LG LG LG eval gt vector make vector 30 eval gt vector list 1 2 3 gt Destruktives Konstrukt Modul V auf Basis von vector set eval gt define Modul V lambda Objekt Index Neuer Wert cond and vector Objekt integer Index lt 0 Index lt Index vector length Objekt vector set Objekt Index Neuer Wert Objekt t display Vektor Angaben fehlerhaft Objekt eva gt define V001 vector Reppenstedt 21391 04131 63845 eval gt Modul V Modul V VO01 1 21339 0 L neburg gt L neburg 21339 04131 63845 eval gt Modul V AB 0 C gt Vektor Angaben fehlerhaft A B Zum Vergleich ist f r Modul V die Listenl sung Modul L ange geben eval gt define Modul L lambda Objekt Index Neuer Wert cond and pair Objekt integer Index lt 0 Index lt Index length Objekt set car member list ref Objekt Index 2 3 ABBILDUNGSOPTION VEKTOR 219 Objekt Neuer Wert Objekt t display Listenangaben fehlerhaft Obj
383. lay I display 9794 Eingegebenes Symbol set I I 1 condl gt T 3 t 9794 Generier tes Symbol g794 Generiertes Symbol eval gt eval Foo gt OEUR 1 EUR 2 EUR 3 EUR Hr Im Fall der Iteration setzt das P Code Konstrukt seinen R ckgabe wert letrec Konstrukt mit Hilfe der wiederholten Anwendung des 1ist Konstruktes zusammen Die geschachtelten 1ist Konstrukte sind nicht sehr bersichtlich Programm S 264 Mit Hilfe von Makros 264 KAPITEL 2 KONSTRUKTIONEN ware eine syntaktisch einfachere Notation moglich Mit Makros befassen wir uns eingehend im Abschnitt 2 5 3 S 293 Zum Verstehen der Aufgabe sind vorab Anforderungen und Testfalle formuliert Dabei verweist die Abktirzung A auf eine Anforderung und die Abktirzung T auf einen Testfall A1 P Code berf hrt sogenannte Pseudocode Notationen in ablauf f hige LISP Konstrukte A2 Implementiert sind die Alternative S 80 A2 1 1f then else fi AQ 2 CLE wns Chen 2s 2 A3 und die Iteration S 89 A3 1 while do od A3 2 d until od T1 Beispiel eval gt P Code while lt I 5 do display I set I I 1 od gt letrec 9799 lambda cond lt I 5 display I set I I 1 9799 t t g799 eval gt letrec gt 012345 t Programm P Code Vor bersetzer define P Code lambda Sexpr cond Mustervergleich if X t
384. lbar Obere Fenster Definitionen Unteres Fenster Interaktionen Ein amp Ausgaben Weitere Fenster hier ausgeblendet z B Modulbrowser Abbildung A 1 PLT Scheme DrScheme bersicht A 3 PLT SCHEME UBERSICHT 469 Datei Bearbeiten Stepper Start lt Step Step gt End gt module page scheme define syntax rule Tausch x y let Temp x set x y set y Temp list x y define First First define Second Second define Foo Tausch First Second gt M acro transformation module page scheme define syntax rule Tausch x y let Temp x set x y set y Temp list x y define First First define Second Second define Foo let Temp First set First Second set Second Temp list First Second a a Macro hiding Standard Legende Macro stepper aktivierbar aus der Toolbar Abildung A 1 S 468 Abbildung A 2 PLI Scheme DrScheme Macro stepper MrEd grafischer Editor und mit Robert B Findler Shriram Krishnamur thi sowie Cormac Flanagan der von DrScheme hinzu A 3 2 Ausgew hlte Scheme Konstrukte Darstellung der Konstrukte anhand von Beispielen in der verk rzten No tation hier statt eval gt lt sexpr gt gt lt sexpr gt Kommentar Abschnitt 1 1 2 S 20 kurz lt sexpr gt gt lt Sexpr gt Kommentar Konstruktoren cons Programmieren ist schwierig list 2 3 7
385. le cdr Zirkulaere_Liste p 0 gt 0 0 E ARBEITSPLAN gt Zirkulaere Liste Element 1 Element 2 Element 3 Neue cons Zelle 0 Platzhalter Legende Symbole S 165 Programmcode S 170 Teil II S 176 Abbildung 2 6 Neuen Vorgang am Anfang der zirkul ren Liste einf gen cons Zelle Teil I Bei der zirkul ren Liste k nnen wir mit dem cdr Konstrukt auf die nachfolgende cons Zelle positionieren In Pfeilrichtung l sst sich der Zirkel durchlaufen in der entgegengesetzten Richtung nicht Soll der cdr Part einer vorgehenden cons Zelle modifiziert werden z B um die aktuelle cons Zelle zu berspringen dann m ssen wir eine Hilfsl sung w hlen Wir durchlaufen den Zyklus in der cdr Richtung so weit bis wir an die vorhergehende cons Zelle kommen Diese Hilfsl sung bildet das Konstrukt Quasi letzte Element ab Abbildung 2 9 S 178 Das Quasi letzte Element Konstrukt gibt als Wert einen Zei ger auf die cons Zelle wieder die der aktuellen cons Zelle in der zir kul ren Liste vorhergeht Zum Herausnehmen einer cons Zelle aus der zirkul ren Liste werden mit den Mutatoren set car und set cdr die Inhalte der gemeinsamen cons Zellen von ARBEITSPLAN und 176 KAPITEL 2 KONSTRUKTIONEN set car Neue cons Zelle car Zirkulaere_Liste set car Zirkulaere Liste Neuer Vorgang 0 0 gt 0 ARBEITSPLAN gt Zirkulaere Liste Neuer Vorgang
386. le f r Abschnitt 2 5 Beispiel Lexikalische Bindung 7 7Funktion und Umgebung lexikalische Bindung eval gt define Zaehler 5 eval gt define Foo lambda set Zaehler 1 Zaehler eval gt let Zaehler 0 Foo Zaehler gt 0 eval gt Zaehler gt 6 2 5 ABBILDUNGSOPTION FUNKTION MIT UMGEBUNG 301 eval gt define Foo lambda Fkt x y let lambda x y apply list x y list Fkt x Fkt y Fkt Fkt x Fkt Fkt y eval gt define Baz lambda z z Z eval gt Foo Baz 1 2 gt 6 12 eval gt let Fkt lambda Fun x cond zero x Fun t lambda x Fkt Fkt f 6 0 gt 6 Beispiel Klassisches LISP Sprung Paar Die beiden Konstrukte catch und throw sind im klassischen LISP das ubliche Sprung Paar catch setzt die Marke throw springt zur Marke Wir realisiert hier dieses Sprung Paar mit der allgemeinen Kontrollstruk tur call with current continuation kurz call cc eval gt define CATCHER CONTINUATIONS null eval gt define syntax rule catch Liste lambda let C gensym Gall ec lambda C set CATCHER CONTINUATIONS cons list cadr Liste C CATCHER CONTINUATIONS cons begin cddr Liste eval gt define throw lambda Marke Sexpr letrec Member Restliste lambda Key L cond null L list eq Key caar L L t Member Restliste Key cdr L Conti
387. leiche Breite L nge und H he die wie derum abh ngig sind von der Breite L nge und H he des Schreibtisches Im imperativ gepr gten Fall bilden wir die Eigenschaften des Schreibtisches als As soziationsliste A Liste Abschnitt 2 2 2 S 183 ab Im objekt orientierten Fall als class Konstrukt Desk Der Beh ltertyp f r die vier Schubladen ist je weils ein vector Konstrukt gt Abschnitt 2 3 S 215 Das Ziehen einer Schub lade pull und das wieder Zur ckschieben push wird bezogen auf die jeweilige Schublade gez hlt Imperativ gepr gte Konstruktion eval gt F r den Mutator set cdr require rnrs base 6 require rnrs mutable pairs 6 eval gt define Desk lambda w 1 h width w Length 1 Height h Drawers d d eval gt define Drawer lambda w 1 h 30engl pattern matching 3lengl forward chaining 32engl backward chaining 33 engl backward chaining rule languages 34PROgramming in LOGic 11 40 450 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Width w Length 1 Height h Drawn 0 eval gt F r die Selektoren define Mein assq lambda Key A Liste cond null A Liste null eq Key caar A Liste car A Liste t Mein assq Key cdr A Liste eval gt define get Drawer lambda n vector ref car cdr Mein assq Drawers MyDesk n eval gt define get Drawn lambda D car cdr Mein assq Drawn D
388. lektierte Zeichenteilkette Sie beginnt mit dem Zeichen bei lt start gt und endet mit dem Zei chen bei lt ende gt 1 dazu die folgenden Beispiele eval gt Foo gt Requirements Engineering eval gt substring Foo 0 12 gt Requirements eval gt substring Foo 0 24 gt Requirements Engineering eval gt substring Foo 24 24 gt eval gt string null substring Foo 13 13 gt t eval gt substring Foo 13 12 gt ERROR substring ending index 12 out of range 13 24 eval gt substring Foo 0 27 gt ERROR substring ending index 27 out of range 0 24 Das car string Konstrukt definieren wir als eine LISP Funktion mit dem eigentlichen Selektionskonstrukt Von bis Analyse und den Hilfsgr en wie z B space als lokale Funktionen Die rekursive Von bis Analyse ermittelt f r die Anwendung des subst ring Konstruk tes die lt start gt und lt ende gt Werte Sie arbeitet mit zwei Zeigern Der erste Zeiger ist der Wert ihrer lambda Variablen Car Start Dieser Zeiger wird auf das erste Zeichen das ungleich space ist gesetzt Der zweite Zeiger ist der Wert ihrer 1ambda Variablen Aktuelle Po sition Dieser wird so lange verschoben bis er auf dem ersten Zwi schenraum nach einem Zeichen ungleich space steht oder das Ende der Zeichenkette erreicht wurde 2 4 ABBILDUNGSOPTION ZEICHENKETTE UND SYMBOL 245 Zum Uberspringen von f hrenden Zwischenr umen verwenden wir die l
389. len Thread solange bis lt thread gt terminiert hat Hinweis thread wait current thread ist ein Deadlock Damit wird nun eine einfache Kommunikation zwischen den Threads f r das Einzahlen und Abheben definiert Abh ngig vom Pr fergebnis ob Deckung nicht gegeben ist wartet der Thread f rs Abheben t ab heben auf die Terminierung des Threads f rs Einzahlen t einzah len eval gt define Bewegungen with Thread Communication lambda einzahlen abheben let t einzahlen thread lambda send A001 einzahlen einzahlen t abheben thread lambda 1f lt send A001 get Kontostand abheben thread wait t einzahlen Ok send A001 abheben abheben sleep 1 0 eval gt define A001 new Konto eval gt Bewegungen with Thread Communication 200 100 Neuer Kontostand 200 EUR Neuer Kontostand 100 EUR eval gt Bewegungen with Thread Communication 50 150 Neuer Kontostand 150 EUR Neuer Kontostand 0 EUR eval gt Bewegungen with Thread Communication 0 100 Neuer Kontostand 0 EUR Keine Deckung Channel In PLT Scheme bietet das eingebaute Konzept Channel Kanal eine M g lichkeit die Threads zu synchronisieren und sie untereinander Werte aus tauschen zu lassen Es gibt zwei Channel Kategorien 1 Synchronous Channels 2 9 KOMMUNIKATION 365 2 Buffered Asynchronous Channels Im ersten Fall synchronous channels wird mit dem channel get Kon strukt solange blocki
390. len die elementaren Einheiten dar mit denen der Konstrukteur umgehen kann dringlich erkannten Problemen erfolgreicher ist zu sein scheint als andere bisher geltende Ans tze Kritik am klassischen Paradigma der Softwareentwicklung 22 144 2 KAPITEL 2 KONSTRUKTIONEN Verkn pfungsmittel Sie erm glichen das Konstruieren von komplexen Konstrukten aus weniger komplexen 3 Abstraktionsmittel Sie benennen komplexe Konstrukte um diese dann als Einheiten handhaben manipulieren zu k nnen Moderne LISP Systeme unterst tzen verschiedene Denkrahmen Para digmen Sie stellen zumindest Mittel bereit f r 1 Hinweis imperativ gepr gte Programme z B set Kennzeichnend sind die Erkl rungen von Variablen und die schritt weise nderung ihrer Werte durch Zuweisungsbefehle engl as sign statements Diese Pr gung unterst tzen z B die Programmier sprachen COBOL oder Pascal funktions gepragte Programme z B lambda apply Kennzeichnend sind Kompositionen von Funktionen hoherer Ord nung Diese Pr gung unterst tzt z B die Programmiersprache ML 75 objekt gepr gte Programme z B class make instance Kennzeichnend sind Objekte lokale Speicher deren Eigenschaf ten durch einen Vererbungsmechanismus bestimmt werden und die Nachrichten untereinander austauschen Diese Pragung un terstutzen z B die Programmiersprachen SmallTalk C und Fla vor gt Abschnitt 2 8 S 327
391. les of Program Design Ubersetzung von R Schaefer und G Weber LITERATURVERZEICHNIS 493 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 Ivar Jacobsen M Christerson P Jonsson G vergaard Object Oriented Soft ware Engineering A Use Case Driver Approach Workingham Addision Wesley 1992 Stefan J hnichen Stephan Herrmann Was bitte bedeutet Objektorientierung in Informatik Spektrum Band 25 Heft 4 August 2002 S 266 275 Hinweis Ein Diskussionsbeitrag zu 31 Simon L Peyton Jones An Investigation of the Relative Efficiencies of Combina tors and Lambda Expressions LISP Conference New York 1982 pp 150 158 Michael J Kaelbling Programming Languages Should NOT Have Comment State ments in SIGPLAN Notices Vol 23 No 10 October 1988 pp 59 60 Gregor Kiczales Jim des Rivieres Daniel G Bobrow The Art of the Metaobject Protocol Cambridge Massachusetts London The MIT Press 1991 Sonya E Keene Object Oriented Programming in COMMON LISP A Pro grammer s Guide to CLOS Reading Massachusetts u a Addison Wesley 1989 Robert M Keller Divide an CONCer Data Structuring in Applicative Multiproces sing Systems LISP Conference Stanford Redwood 1980 pp 196 202 B W Kernighan PJ Plauger The Elements of Programming Style New York McGraw Hill Second Edition 197
392. letz ten Argumentes ist der Wert des gesamten begin Konstruktes eval gt begin lt sexpr gt lt Sexprn gt gt lt valuesexprn gt entspricht damit eval gt lambda ZSEeXDf gt lt SEXPin gt gt lt valuesexprn gt Wir k nnen uns daher das 1ambda Konstrukt als ein Konstrukt vor stellen das ein implizites begin Konstrukt enth lt Eine implizit for mulierte Sequenz ist in einigen LISP Konstrukten implementiert z B im cond Konstrukt nicht jedoch im if Konstrukt Programmfrag ment in Tabelle 1 13 S 79 Die Sequenz ist auch aufgrund der festen Reihenfolge die eval Regel 2 vorgibt abbildbar S 22 Danach sind erst die Argumente auszuwerten ehe die Funktion darauf angewendet wird Wir definieren daher ein Lambda Konstrukt mit einem formalen Parameter DUMMY so dass die Angabe eines Argumentes m glich ist Die Applikation die ser anonymen Funktion bildet dann die Sequenz dadurch ab dass lt sexpr gt das Argument bildet und lt sexpra gt der Funktionsk rper ist eval gt lambda DUMMY lt sexpr gt lt sexpr gt gt lt valuesexpr2 gt Sicherzustellen ist allerdings dass die Bindung von DUMMY an lt valuesexpr gt keinen Einfluss auf die Berechnung von lt valuesexpr2 gt hat Anders formuliert Die lambda Variable DUMMY darf nicht als freie Variable im Ausdruck lt sexpra gt vorkommen Durch die Komposition entsprechender 1ambda Kons
393. lexen Problem f hrt die Zusammenfassung von Ope rationen entsprechend der Matrix Spalten Tabelle 1 3 S 53 zu ei ner Hierarchie von Konstrukten Diese Hierarchie ist gepr gt durch die Operationen Aktionen des jeweiligen Aufgabengebietes Beispielswei se k me man zur Operation Neuanlegen ber ein hierarchisch h heres Konstrukt Wir nehmen an dass diese Auswahloperation den Namen Verwalten habe Das Konstrukt Verwalten ermittelt dann anhand seines Operanden dass Neuanlegen auszuf hren sei So entsteht eine operations gepr gte Konstruktion Sie ist gegliedert modularisiert in Operationen Im Mittelpunkt der systema naly tischen berlegungen stehen die Aktionen Prozesse Vorg nge W ren nach Fertigstellung der Konstruktion weitere Operanden wie z B Sachkonten einzubeziehen dann sind in den Operationen Neu anlegen L schen etc jeweils die entsprechenden Funktionen f r die Sachkonten einzubauen Dies ist im Falle vieler bestehender Operatio nen ein sehr aufwendiges und fehleranf lliges Unterfangen weil fertig gestellte Konstrukte z B Neuanlegen modifiziert werden m ssen Da mit sind neue Fehler f r schon programmierte Operandentypen nicht auszuschlie en Sind solche nderungen wahrscheinlich dann empfiehlt es sich die Konstrukte aus der Matrixzeilen Sicht zu entwickeln statt sie aus der Matrixspalten Sicht zu bilden Exemplarisch ist das Konstrukt Kunde als Programmfragment in Tabelle 1 8 S 64 definiert Es skiz
394. lger eines Knotens und ihre Entfernungen sind als Eigenschaft Nachfolger gespeichert und zwar als folgende A Liste lt nachfolger gt lt ent fernung gt E2 Entfernungsschaetzung Start gt Ziel addiert zum zur ck gelegten Weg vom Start zum Knoten den Absolutbetrag der Diffe renz der x Koordinatenwerte zwischen Knoten und Zielknoten Abbildung 2 14 S 206 2 2 ABBILDUNGSOPTION LISTE 207 E3 Zwischen zwei nicht miteinander verbundenen Knoten ist die Ent fernung unendlich hier ist es der Wert 9 9e99 T1 Beispiel T1 1 Daten Programm in Tabelle 2 5 S 199 T1 2 Applikation Tabelle 2 7 S 212 eval gt A Search U H gt U E CH Programm A Search define A Search lambda Start Knoten Ziel Knoten letrec Liste eroeffnete Knoten list Start Knoten Liste geschlossene Knoten list Analyse Knoten list Arbeitsliste list Get Nachfolger lambda Knoten map lambda x car x getprop Knoten Nachfolger Ent fernungsschaetzung Start gt Ziel lambda Knoten getprop Knoten Entfernung vom Start Entfernungsschaetzung Knoten gt Ziel Knoten Entfernungsschaetzung Knoten gt Ziel lambda Knoten abs car g etprop Ziel Knoten Ort car getprop Knoten Ort Entfernung Start Knoten gt Anderer Knoten lambda Knoten Anderer Knoten getprop Knoten Entfernung vom Start Falls Knoten nicht mit Anderer Knoten ve
395. lichkeiten f r mehrere Zwecke zugeordnet lt gt Abbildung 2 20 S 249 Hinweis putprop getprop in PLT Scheme DrScheme Die Konstruke zur P Liste sind in MzScheme vorhanden MzScheme steht in PLT Scheme DrScheme zur Verf gung wenn die Defintionen von com pat ss geladen und compiliert wurden Bei der Standardinstallation von PLT Scheme DrScheme steht der module compat unter C Programme plt collects mzlib compat ss anders formuliert eval gt require mzlib compat 192 KAPITEL 2 KONSTRUKTIONEN Bisher haben wir den Wert eines Symbols betrachtet Dieser wird mit der Wertzelle engl value cell abgebildet Beim Evaluieren eines Symbols EVAL Regel 4 S 26 wird auf diese Zelle zugegriffen Im allgemeinen verf gt ein Symbol zus tzlich ber eine Zelle zum Abbilden der P Liste Eine Eintragung in die P Liste eines Symbols erfolgt mittels putprop Der zugeh rige Selektor ist das getprop Konstrukt Mit dem remprop Konstrukt wird eine Eigenschaft von der P Liste entfernt Die gesamte Eigenschaftsliste ist durch das proplist Konstrukt verf gbar Ein be sonderes Pr dikat f r die P Liste gibt es nicht da sich die P Liste von einer normalen Liste nicht unterscheidet Zu beachten ist dass man che Implementationen keinen R ckgabewert ausgeben d h es gibt kein gt lt wert gt Konstruktor Mutator Eingeschr nkte Verf gbarkeit in PLT Scheme eval gt putprop lt symbol gt lt eigenschaft g
396. ll define Kontostand 0 Initialisierung der Superklasse super new f Methoden Selektoren define public get Identifizierung lambda Identifizierung define public get Name Inhaber lambda Name Inhaber define public get Adresse Inhaber lambda Adresse Inhaber define public get Einzahlungen lambda Einzahlungen define public get Auszahlungen lambda Auszahlungen define public get Kontostand lambda Kontostand Methoden Mutatoren define public set Name Inhaber lambda Name set Name Inhaber Name define public set Adresse Inhaber lambda Adresse set Adresse Inhaber Adresse define public set Einzahlungen lambda Wert set Einzahlungen Wert define public set Auszahlungen lambda Wert set Auszahlungen Wert Nur intern zugreifbar define set Kontostand lambda Wert set Kontostand Wert Konstruktor F r das Kreieren eines Kontos ist das new Konstrukt zu applizieren Sein erstes Argument ist die Klasse hier Konto Da das new Konstrukt ein class Konstrukt bedingt verteilt sich die origin re Konstruktor Aufgabe Definition und Implementation auf beide Kon strukte Als Kontenbeispiele konstruieren wir A001 und A002 wie folgt eval gt define A001 2 8 KLASSE INSTANZ MODELL 3al new Konto id 1 name Hinrich Bonin eval gt define A002 new Konto id 2 gt ERROR instantiate no argument for requ
397. ll Jim McKim Design by Contract by Example Amsterdam Addison Wesley Longman Oktober 2001 ISBN 978 0201634600 Mitchell L Model Multiprocessing via Intercommunicating LISP Systems LISP Conference Stanford Redwood 1980 pp 188 195 David Moon Object Oriented Programming with Flavors in ACM Procee dings OOPSLA86 SIGPLAN Notices 21 11 1986 pp 1 8 Joel Moses The Function of FUNCTION in LISP or WHY the FUNARG Problem Should be Called the Environment Problem in SIGSAM Bulletin New York July 1970 pp 13 27 Steven S Muchnick Uwe E Pleban A Semantic Comparison of LISP and SCHE ME LISP Conference Stanford Redwood Est 1980 pp 56 64 Jorg M hlbacher Datenstrukturen M nchen Wien Carl Hanser 1975 Dieter Muller LISP Eine elementare Einf hrung in die Programmierung nicht numerischer Aufgaben Mannheim Wien Zurich Bibliographisches Institut 1985 LITERATURVERZEICHNIS 495 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 Frieder Nake Informatik und Maschinisierung von Kopfarbeit in 43 S 181 201 Zum Schaffen von Frieder Nake 152 A Narayanan N E Sharkey An Introduction to LISP Chichester Ellis Horwood 1985 I Nassi B Shneiderman Flowchart Techniques for Structured Programming in SIGPLAN Notices 8 1973 8 p 12 26 H O Peitgen P H Richter
398. lle Gebrauch trait eval gt define Vorgang Vorgang mixin Offener Vorgang eval gt define VGOO1l new Vorgang id 13 name Monika Meyer eval gt send VG001 get Gebrauch gt Offentlichvertraulich 2 8 3 Zusammenfassung Spezialisierung und Faktori sierung Eine Klasse ursprunglich auch Flavor genannt definiert die Struktur und Eigenschaften einer Menge von Objekten den Instanzen Eine Ope ration deklariert in der Klasse heilt Methode Sie wird ber eine Nach richt an das Objekt aktiviert Bei der Vererbung kann eine Instanz die Struktur und Eigenschaften Slots und Methoden mehrerer Klassen bernehmen erben Bei na mensgleichen Slots und Methoden bedarf es einer Priorit tsregelung Bei der dynamischen Vererbung werden Ver nderungen des Vererbungsgra fen permanent berwacht und sofort ber cksichtigt propagiert Eine statische Vererbung wertet den Vererbungsgrafen nur zum Konstrukti onszeitpunkt einer Instanz aus Eine Modifikation des Grafen erfordert dann eine Neukonstruktion der Objekte Ein Aspekt zur Beurteilung einer objekt orientierten Software Ent wicklungsumgebung sind die Optionen zur Spezialisierung und Fakto risierung Sind spezielle Eigenschaften im Sinne von Teileinheiten wie Mixins und Traits jeder Zeit definierbar Das Komplement zu dieser Spezialisierung ist die Faktorisierung Hier geht es um die M glichkeit jederzeit Eigenschaften aus existierenden Subklassen
399. ller Werte vor der Bin dung an die lambda Variablen erfolgt Beim let Konstrukt sind sie da her bei der Wertermittlung nicht zugreifbar eval gt let x 3 yi 2x x y gt ERROR Das Symbol x ist nicht definiert Hilfsweise konnen wir die Sequenz durch Schachtelung von let Konstrukten abbilden die nur eine lokale Variable ausweisen lt gt Curry fizieren einer Funktion Abschnitt 2 5 1 S 277 eval gt let x 3 1 2 KOMBINIEREN VON KONSTRUKTEN 75 x y gt 9 In LISP Systemen gibt es eine bersichtlichere L sung durch das let Konstrukt Dieses bindet die lokalen Variablen der Reihe nach Zunachst wird der Wert fiir die erste Variable ermittelt und dann wird diese ge bunden Danach wird jede neue Bindung in der Umgebung ausgewertet die durch die vorhergehenden lokalen Variablen erweitert wurde eval gt let gt 9 Hinweis Implementation des 1et Konstruktes Das let Konstrukt ist h ufig wie das 1et Konstrukt als Makro Konstrukt implementiert N heres Abschnitt 2 5 3 S 293 Es expandiert unser obiges Beispiel wie folgt PC Scheme eval gt EXPAND MACRO Aler tix 3 ty 1 2 xy x y gt lambda x Let iy I8 2 X 44 2 yl 3 Das let Konstrukt erm glicht die Abbildung der Sequenz Teil 1 Teil 2 und Teil 3 Abbildung 1 16 S 70 wie folgt eval gt define Gesamt let Teil 1 lt sexpr gt f r Teil 1 Teil 2 lt sexpr gt f r Teil 2
400. lls Anspr che bestehen define Bescheid lambda Daten Formular 13 Akte Antragsteller define effects Berechnet Betr ge Termine und pr ft die Akte im Hinblick auf berzahlung define constraints Die einzelnen Berechnungsschritte sind ber die Dialogschnittstelle zu quittieren oder zu korrigieren define side effects Jeder Aufruf f hrt zu einem Eintrag im System Journal Daten Formular 412 define R ckrechnung lambda define effects Ermittelt den zus tzlichen Anspruch bei r ckwirkenden nderungen der Regels tze T2 3 2 3 Zusammenfassung Spezifikation Spezifizieren hei t Pr zisieren und umfasst alle Phasen Ziel ist eine Spe zifikation mit der Pr zision der Mathematik und der Verst ndlichkeit der Umgangssprache Die Aufgabenart Vollzugs Defintions Zielerreichungs oder Steue rungsproblem und die Aufgabengr e ein Mann kleines Team oder gro e Mannschaft erfordern unterschiedliche rechnergest tzte Arbei tstechniken Eine funktionale Anforderung beschreibt eine Leistung bzw eine quantitative oder qualitative Systemeigenschaft Von ihr fordern wir Rea lisierbarkeit und Gestaltungsrelevanz Schrittweise werden qualitative Vorgaben verfeinert bis die einzelnen Eigenschaften durch Ersatzlei stungen approximierbar sind Benutzt und Enth lt Relationen dienen zum Spezifizieren von Mo duln und ihren Wechselwirkungen Wir definieren eine azyklische Modul Hier
401. lnde ELSE Problem wird vermieden 20 KAPITEL 1 KONSTRUKTE KJ HIHI 1 1 2 Semantik Regeln zum Auswerten Evaluieren Der Prozess betont im Namen LISt Processing bewirkt die Auswertung von symbolischen Ausdr cken Ein LISP System liest einen symbolischen Ausdruck ein z B von einer ffnenden Klammer bis zur korrespondie renden schlie enden Klammer und wertet diesen Ausdruck aus Als Voll zug der Auswertung gibt es einen symbolischen Ausdruck zur ck der als Wert engl value des eingelesenen Ausdruckes betrachtet wird Der Prozess besteht aus drei Phasen 1 Einlesen READ Phase 2 Auswerten EVAL Phase und 3 Ausgeben PRINT Phase Ein LISP System kann nach diesen drei Phasen den nachsten sym bolischen Ausdruck auswerten Der Prozess ist somit ein READ EVAL PRINT Zyklus lt gt Abbildung 1 4 S 21 In diesem Buch sind die drei Prozessphasen durch folgende Notation abgegrenzt eval gt lt sexpr gt gt lt sexpr gt Kommentar Beispiel eval gt Abbuchung Meyer AG 67 23 gt 41 45 Neuer Saldo Der nach dem Prompt eval gt notierte symbolische Ausdruck durchl uft die READ und die EVAL Phase Der symbolische Ausdruck notiert nach dem Pfeil gt ist der ausgegebene Wert d h das Ergebnis der PRINT Phase Der Text in einer Zeile notiert hinter einem Semikolon ist zu satzlicher Kommentar Die Regeln zur Auswertung Evaluierung definieren die operatio nale Semantik von LISP d
402. lt werden dann ist stattdessen apply lt f gt lt sexpr gt zu notieren Im Fall der Li ste ist zu unterscheiden zwischen lt f gt lt sexpr gt f r single argument functions und apply lt f gt lt sexpr gt f r multi argument functions Da das Binden eines Symbols an eine anonyme Funktion also die Namensvergabe f r eine Funktion eine h ufige Aufgabe ist gibt es in LISP Systemen dazu eine syntaktische Vereinfachung Das explizite No tieren von lambda entf llt bei der Kurzschreibweise Statt eval lt define lt symbol gt lambda lt parameter gt lt parameter gt kann verk rzt geschrieben werden eval gt define lt symbol gt lt parameter gt lt parameter gt Bezogen auf unser Beispiel Abbuchen k nnen wir daher alternativ for mulieren eval gt define Abbuchen lambda Alter Saldo Abbuchungsbetrag Alter Saldo Abbuchungsbetrag eval gt define Abbuchen Alter Saldo Abbuchungsbetrag Alter Saldo Abbuchungsbetrag Hinweis Syntax define Konstrukt Diese syntaktische Vereinfachung des define Konstruktes wird im Fol genden nicht genutzt Die Langform dokumentiert unmissverst ndlich dass die anonyme Funktion wie ein sonstiger Wert benannt wird Sie ver deutlicht dass im Rahmen dieser Benennung keine Unterscheidung zwi schen verschiedenen Typen von symbolischen Ausdr cken gemacht wird Ein Symbol wird stets mit der Syntax define lt symbol gt
403. ltigen Analysezwecken sind z B zu nennen 1 Das Nachvollziehen von Ergebnissen Output bei vorgegebener Ausgangssituation Input 2 das Pr fen der bereinstimmung mit der Spezifikation 3 die Erweiterung des Leistungsumfangs 4 die Korrektur von Fehlern 5 die Ver nderung des Ressourcen Bedarfs Stichwort Tunen und 6 die Portierung auf ein anderes System 146 KAPITEL 2 KONSTRUKTIONEN Das Herausfinden und Verstehen der Konstrukte die fiir den jewei ligen Analysezweck relevant sind ist keine triviale Aufgabe Zu beant worten sind die beiden Fragen 1 Aus welchen bekannten Konstrukten besteht die Konstruktion 2 Welche Wechselwirkungen Interaktionen bestehen zwischen die sen Konstrukten Als Beispiele analysieren wir zwei Programmfragmente lt gt Tabelle 2 2 S 147 und 2 3 S 148 im Hinblick auf eine Portierung nach Scheme Beim ersten Programmfragment ist die Beseitigung der Namensunter schiede von eingebauten Konstrukten hier ZEROP bzw zero nicht ausreichend Zu ber cksichtigen sind die unterschiedlichen Bindungs strategien des namensgleichen Konstruktes let Etwas salopp formu liert Kein Verlass auf Namen Im zweiten Programmfragment ist die Ite ration auf direkte Weise durch einen expliziten R cksprung mit dem GO Konstrukt und der Sprungmarke LOOP realisiert Das Verlassen der Iteration geschieht ber das RETURN Konstrukt Diese Aufgabe kann in Scheme entweder ein do Konstrukt oder eine rekurs
404. mbH gt Lieferant eval gt car cdr Schulze GmbH gt Daten zur Schulze GMBH eval gt car Verwahrung 1 gt Kassenkonto eval gt car cdr Verwahrung 1 gt Daten zum Verwahrkonto 1 Legende Selektion des Operanden Typs und der zugehorenden Daten ftir Programmfragment 1 4 5 56 Tabelle 1 5 Programmfragment Selektion des Operanden Typs und der zugeh renden Daten Beispiele zum car und cdr Konstrukt eval gt cdr Leuphana gt ERROR keine Liste quote eval gt car Leuphana gt ERROR keine Liste string eval gt car cdr eins zwei drei vier gt zwei eval gt car cdr cdr cdr eins zwei drei vier gt vier Zur Reduzierung des Schreibaufwandes einer Kette geschachtelter Selektoren erm glichen LISP Systeme eine verk rzte Schreibweise in der Form c r z B cadr oder cdddr blicherweise k nnen caxr oder cdxr formuliert wobei x eine Folge von bis zu drei Buchstaben a bzw d sein kann Zus tzlich existiert ein Selektor der auf eine angegebene Ele menteposition zugreift list ref Konstrukt S 126 eval gt cadr eins Zwei drei vier gt zwei eval gt caar eins zwei gt eins eval gt cdddddr 1 23 45 67 8 9 gt ERROR cdddddr ist nicht definiert 58 KAPITEL 1 KONSTRUKTE und w re auch unzweckm ig Werden die Selektoren car und cdr auf die leere Liste angewendet dann ist ihr R ckgabewert nich
405. me gt Zahlungen Im Sinne der rekursiven Problemlosungsmethode bei der angenom men wird dass eine Teillosung quasi existiert unterstellen wir auch hier die Funktion Summe ware verf gbar woher auch immer Wenn die Funktion Summe schon gedanklich existiert dann K nnte sie al lerdings auch ber die lambda Schnittstelle dem Funktionsk rper von lt summe gt bergeben werden Die Funktion lt summe gt h tte dann zwei lambda Variablen Funktion f r die zu bergebende Funktion Summe und Liste die bisherige Variable Wenn wir im Funktionsk rper die bergebene Funktion aufrufen also Summe dann ist zu beachten dass diese jetzt zwei Argumente ben tigt eval gt let Summe lambda Funktion Liste cond null Liste 0 number car Liste car Liste Funktion Funktion cdr Liste t Funktion Funktion edr Liste Summe Summe Zahlungen gt 80 0 Zun chst bindet das 1et Konstrukt in seiner Umgebung das Symbol Summe an eine Funktion mit den beiden lambda Variablen Funktion und Liste Diese Funktion hat keinen Selbstbezug zum Symbol Summe In ihrem Funktionsk rper wird die lambda Variable Funktion einer seits appliziert und andererseits als Argument genutzt Die Besonderheit 2 5 ABBILDUNGSOPTION FUNKTION MIT UMGEBUNG 281 ist das Zusammenfallen der Punkte applizierte Funktion und Argu ment Wird die lambda Variable Funktion durch die Notation als er stes Element einer Liste al
406. mentation of Multilisp Lisp on a Multiprocessor Conference record of ACM Symposium on LISP and Functional Programming Proceedings Salt Lake City Utha 1984 pp 9 17 Robert H Halstead Jr New Ideas in Parallel Lisp Language Design Implemen tation and Programming Tools in Ito Halstead 1989 pp 2 57 Christian Michael Hamann Einf hrung in das Programmieren in LISP Berlin New York Walter de Gruyter 1982 492 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 LITERATURVERZEICHNIS J rgen Handke Sprachverarbeitung mit LISP und PROLOG auf dem PC Band 27 Programmieren von Mikrocomputern Braunschweig Wiesbaden Vieweg amp Sohn 1987 Williams Ludwell Harrison III The Interprocedural Analysis and Automatic Par allelization of Scheme Programs in LISP and Symbolic Computation Volume 2 Number 3 4 October 1989 pp 179 396 Friedrich Haugg Stefan Omlor LISP auf PC s Methoden und Techniken der Symbolischen Datenverarbeitung M nchen Wien Carl Hanser Verlag 1987 Anthony C Hearn Standard LISP in ACM SIGPLAN Notices Vol 4 No 9 1969 auch Technical Report AIM 90 Artificial Intelligence Project Stanford Universi ty Peter Henderson FUNCTIONAL Programming Application and Imple mentation Englewood Cliffs New Jersey Prentice Hall International 1980 Wade L Hennessey COMMON LISE New York St Louis San Fra
407. mentation string Abschnitt 3 1 2 S 389 In allen nicht rechnergest tzten Lesef llen ist sie nicht besser als eine Semikolon Notation Abschnitt 3 1 2 S 389 Problem Reihenfolge im Lexikon Mit dem Verweis auf eine zus tzliche Beschreibung in einem Lexikon wird deutlich dass der Name so zu w hlen ist dass wir diese Beschrei bung leicht finden auch im Suchfall ohne direkte Rechnerunterst tzung 386 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Mit einem standardisierten Pr fix f r Selektoren hier Get wer den diese im Lexikon alle hintereinander ausgewiesen Wahrscheinlich bevorzugen wir jedoch eine Ordnung bei der unser Verbund von Kon struktor Selektor Pr dikat und Mutator Abschnitt 2 1 2 S 146 hin tereinander ausgewiesen wird Suchen wir z B die Beschreibung f r window Konstrukte in einer LISP Bibliothek dann durchlaufen wir fol gende Reihenfolge der Lexikoneintr ge window clear window delete window get attribute window set size window Selbst hier ist h ufig z B bei PC Scheme der zugehorende Konstruk tor nicht konsequent mit window make sondern mit make window bezeichnet und befindet sich daher viel weiter vorn im Lexikon Wir k nnen die gew nschte Reihenfolge erreichen indem wir jeweils einen Standard Suffix f r Konstruktor Selektor Pr dikat und Mutator verwenden L sung G e Standard Suffix f r den Verbund von Konstruktor Selektor Pr dikat und Mutator eval gt define Fi
408. mespace begin eval define lt variable gt eval lt value gt global namespace 298 KAPITEL 2 KONSTRUKTIONEN eval gt define syntax rule definep L lambda let let namespace make base namespace Falls keine vollstandigen Symbol Wert Paare Liste cond even length L L t append L list j length Liste begin do i 0 i 2 gt ij eval define list ref Liste i 0 eval list ref Liste i 1 global namespace let namespace let namespace Legende Das definep Konstrukt dient zum Binden von mehreren Symbolen Tabelle 2 8 Programm definep let namespace let namespace Ruckgabewert Anhand einiger Beispiele verdeutlicht das def inep Konstrukt die Wer te in verschiedenen Namensraumen eval gt define global namespace current namespace eval gt define Foo 10 eval gt define ns definep Foo 2 Foo Baz 3 4 Bar Beispiel Makroexpansion definep Der Makro definep S 298 expandiert fiir dieses ns Konstrukt wie folgt define ns lambda let let namespace make base namespace 2 5 ABBILDUNGSOPTION FUNKTION MIT UMGEBUNG 299 Liste cond even length Foo 2 Foo Baz 3 4 Bar Foo 2 Foo Baz 3 4 Bar t append Foo 2 Foo Baz 3 4 Bar lise e j length Liste begin do i 0 i 2 gt i j eval
409. mme Formel Summenregel Vereinfache Summe Bilde Summe Ableiten Erster Summand Formel Variable Ableiten Zweiter Summand Formel Variable Produkt Formel Produktregel Vereinfache Summe Bilde Summe Vereinfache Produkt Bilde Produkt Ableiten Multiplikand Formel Variable Multiplikator Formel Vereinfache Produkt Bilde Produkt Multiplikand Formel Ableiten Multiplikator Formel Variable t print Keine Ableitung fuer print Formel print definiert Startfunktion Ableiten Mathematischer Ausdruck dx Die Applikation von Ableitungsfunktion erzielt damit folgende Ausgabe eval gt Ableitungsfunktion 2 1 VERSTEHEN EINER KONSTRUKTION 199 a x x bx c x gt a 2 x b Zur Berechnung eines Wertes der Ableitungsfunktion definie ren wir die folgende Funktion Ableitungswert eval gt define Ableitungswert lambda Mathematischer Ausdruck dx an der Stelle eval list lambda list dx Ableitungsfunktion Mathematischer Ausdruck dx an der Stelle eval gt define a 3 eval gt define b 5 eval gt Ableitungswert A a xX X Ae DR Cy 7X I Erl uterungen Die Ableitungsregel f r eine Summe kurz Summen regel lautet daa un m Das Ergebnis die rechte Seite der Sum menregel ist ein zusammengesetzter Ausdruck der wieder eine Summe darstellt Das Zusammenf gen von un mit ar bernimmt d
410. mme lambda Liste cond null Liste 0 number car Liste car Liste Summe cdr Liste t Summe edr Liste Summe Zahlungen gt 80 0 Unser Ziel ist eine rekursive L sung ohne die Nutzung des let rec Konstruktes Gesucht ist ein Mechanismus der rekursive L sungen konstruieren kann die nur auf dem lambda Konstrukt bzw dem let Konstrukt als dessen syntaktische Vereinfachung basieren und kein set Konstrukt verwenden Hier wollen wir daher nicht das letrec Konstrukt entsprechend Abschnitt 1 2 2 S 69 diskutieren da dieses auf dem set Konstrukt aufbaut Ein solcher Mechanismus ist der Fixpunktoperator Y engl the appli cative order fixed point operator for functionals Der Fixpunktoperator Y 2 5 ABBILDUNGSOPTION FUNKTION MIT UMGEBUNG 2 9 erf llt die folgende Bedingung F Y F x Y F x Anders formuliert fp x fp x Dabei ist f der Fixpunkt von F d h F berf hrt f in fp F r un ser Problem ist das F Konstrukt wie nach den weiteren Ausf hrungen deutlich wird folgenderma en definiert eval gt define F lambda Summe lambda Liste cond null Liste 0 number car Liste car Liste Summe cdr Liste t Summe cdr Liste Der Fixpunktoperator Y ist eine Funktion die eine Funktion nimmt die als rekursive Funktion betrachtbar ist und eine andere Funktion zuruckgibt welche die rekursive Funktion implementiert Di
411. mmentierung gt z B auch 107 S 377 Ihre Aufgabe ist die Warum Erl uterung und nur in F llen wenn unserem Adressaten die Abarbeitungsfolge fremd sein wird auch die Wie Erl uterung So werden Kommentare kein Ersatz f r eine unzul ngliche Benennung von Konstrukten Umgekehrt muss die Benennung nicht mit Informationen zum Warum belastet werden Nicht zu bersehen sind die gravierenden Nachteile von Kommentar zeilen Zun chst ist zu vereinbaren ob sie das ihnen nachfolgende Pro gramm fragment beschreiben oder das vorhergehende Selbst bei strik ter Einhaltung einer entsprechenden Vereinbarung lt gt Tabelle 3 3 S 391 bleibt der Nachteil dass die Reichweite eines Kommentars nicht unmit telbar erkennbar ist sondern durch Interpretation des Textes zu folgern ist Konstruktionsm lsig wird eine Kommentarzeile eher wie ein global definierter Wert behandelt Die Kommentierung bleibt damit auf dem Er kenntnisniveau primitiver Programmiersprachen stehen die keine Block strukturen d h keine lokalen Werte kennen W nschenswert w re ein Mechanismus zur Kommentierung der die Reichweite und die Verkn p fung mit dem jeweiligen Programmfragment gew hrleistet 13 Solange das eingesetzte LISP System einen solchen Mechanismus nicht bietet sind wir auf eine Ersatzl sung angewiesen Eine einfache L sung zeigt Tabelle 3 3 S 391 Insbesondere aus dem Umfeld vom Massachusetts Institute of Techno logy Cambridge MIT stam
412. mmerziell verf gbare LISP Maschine Im Jahre 1984 stellte Texas Instruments den Explorer vor der auf den Arbeiten vom MIT und PARC fu t Unter dem Begriff Symbolic Pro cessor fallen auch die Inference Machine und die Melcom PSI Machine Mitsubishi die erste PROLOG basierte Maschine Bei den LISP Maschinen war z B im Jahre 1987 Symbolics Inc der Marktf hrer 2000 Maschinen 127 Der damalige Markterfolg war vornehmlich auf die hervorragende Software Entwicklungsumge bung zur ckzuf hren z B 26 Das Common LISP entwickelt aus dem urspr nglichen ZetaLISP ist durch ein leistungsf higes Flavor System erg nzt Mit diesem ist ein dy namisches Windowsystem implementiert Ein inkrementeller Compiler erleichtert die edit compile debug Abl ufe Eine Vielzahl von Werkzeugen aus der Disziplin K nstliche Intelligenz war auf diesen LISP Maschinen lauff hig z B OPS5 Verac KEE IntelliCorp oder ART Inference Cor poration Hervorzuheben war die ausgezeichnete Grafik Unterst tzung sowohl schwarz wei wie farbig Der Explorer verf gte ber Common LISP mit der Flavor Erweiterung der urspr nglichen MIT LISP Maschine hnlich wie bei der Symbolics Familie waren auch f r den Explorer der gro e Arbeitsspeicher bis 16 Me gabyte und der gro e virtuelle Adressraum bis 128 Megabyte charak teristisch Die Xerox 1100 Familie stammt nicht direkt von der MIT LISP Ma schine ab Sie wurde parallel dazu von Xerox entwi
413. mpany Pob 487 Redwood Estates CA 95044 TLC LISP Documentati on Primer Metaphysics and Reference Manual 1985 David S Touretzky LISP A Gentle Introduction to Symbolic Computation New York u a Harper amp Row 1984 David S Touretzky The Mathematics of Inheritance Systems Research Notes in Artificial Intelligence London Pitman 1986 Christian Wagenknecht Progammierparadigmen Eine Einf hrung auf der Grundlage von Scheme Stuttgart Leipzig Wiesbaden B G Teubner Verlag 2004 J rgen Wagner Einf hrung in die Programmiersprache LISP Ein Tutorial Vater stetten IWT 1987 498 188 189 190 191 192 193 194 195 LITERATURVERZEICHNIS Daniel Weinreb David Moon Lisp Machine Manual Third Edition March 1981 Massachusetts Institute of Technology Cambridge Clark Weissman LISP 1 5 Primer Boston PWS Publishers 1967 Patrick Henry Winston Berthold Klaus Paul Horn LISP Second Edition Reading Massachusetts Addison Wesley 1984 Deutsche Fassung 1987 Ubersetzung von B Gaertner u a Niklaus Wirth Algorithmen und Datenstrukturen Pascal Version 3 berarbeitete Auflage Stuttgart B G Teubner Verlag 1983 1 Auflage 1975 Jon L White LISP Program Is Data A Historical Perspective On MACLISP Proceedings of the MACSYMA Berkeley Calif 1977 pp 180 189 William G Wong TLC LISP A fully featured LISP implementation BYTE Oc tober 19
414. mt eine Konvention mit Semikolon Folgen die auch Eingang in die Common LISP Beschreibung gefunden hat 174 S 348 Ein Semikolon also Einfach Semikolon Kommentar dient zur Kom mentierung der Zeile auf der es steht Dabei sind mehrere Einfach Semikolon Kommentare spalten m ig auszurichten d h sie beginnen stets in der gleichen Spalte Ist der Kommentar l nger als die verbleiben de Restzeile dann wird er auf der n chsten Zeile fortgesetzt allerdings folgt diesem Semikolon ein Leerzeichen Ein Doppelter Semikolon Kommentar beginnt in der Spalte in der das zu erl uternde Konstrukt anf ngt Nach dem doppelten Semikolon folgt ein Leerzeichen Die Kommentierung bezieht sich in der Regel auf das MIT http web mit edu Zugriff 3 Jan 2010 3 1 TRANSPARENZ DER DOKUMENTATION 391 Symbol Erlauterung lt comment gt Markiert die Stelle des Beginns der Reichweite eines Kommentars lt comment gt Markiert die Stelle des Endes der Reich weite eines Kommentars lt comment gt Einzeiliger Kommentar dessen Wir kung dokumentabh ngig entweder das vorher oder das nachfolgende Kon strukt erl utern Legende Gem Extensible Markup Language XML der Idee strukturierte Daten jeglicher Art z B auch Bilder in Form von Textdateien zu verwalten und mit Stylesheets Textdateien auszuwerten XML Standard http www w3 org TR xmlbase Zugriff 3 Jan 2010 Tabelle 3 3
415. mulieren indem wir einer Funktion sich selbst als Argument bergeben Diese Technik haben wir beim Fixpunktoperator Y genutzt lt gt Abschnitt 2 5 1 S 277 Jetzt bergeben wir einer Continua tion sich selbst als Argument Anders formuliert Die Continuation repr sentiert die Zukunft d h die noch abzuwickelnden Schritte Ihr Argument repr sentiert den Startwert daf r d h den Wert der vollzoge nen Schritte Vergangenheit 292 eval gt define Summe m gt n lambda m n Fallunterscheidung 1 eval gt Von Wert eval gt cond lt m n KAPITEL 2 KONSTRUKTIONEN let Summe 0 Verarbeitung call cc lambda c c Fallunterscheidung 2 cond t t display display display display mn m Summe set Summe n Summe set n n 1 display Verarbeitung display fi display n display Summe display Summe newline Verarbeitung Verarbeitung Von Wert m nicht gr sser bis Wert my Summe m gt n 4 2 gt 4 nicht grosser bis Wert 2 Summe m gt n 2 5 gt lt continuation gt n lt continuation gt n lt continuation gt n 14 4 Summe 5 3 Summe 9 2 Summe 12 Zum Verstehen des Konstruktes Summe m gt n ist die Bindung der lambda Variablen c bedeutsam Ihr Wert repr sentiert die ausstehen den Abarbeitungsschritte die das cond Konstrukt Fallunterschei dungen 2
416. myTitle para LISP ist abgeleitet aus dem Jambda Kalk l und gepr gt durch die Dualitat von Daten und Programm para LISP erm glicht mit seinem modernen Dialekt frame colorize text Scheme font40nmb 10 0 red ohne Ballast next para colorize text imperativ gepragtes font40nmb 10 0 red Programmieren next para colorize text funktions gepragtes font40nmb 10 0 red Programmieren next para colorize text objekt gepr gtes font40nmb 10 0 red Programmieren slide title myTitle para Ein systematischer Konstruktionsvorgang bedingt next item Zweckm ige Bausteine Konstrukte next item Vielf ltige Muster Konstruktionen next item Bew hrte Konstruktionsempfehlungen next colorize text LISP erf llt diese Bedingungen font40nmb 10 0 red slide title myTitle para Das bliche erste Beispiel in colorize text Scheme font40nmb 10 0 red 3 4 PRASENTATION SLIDESHOW 443 code module Start scheme lambda Hello World slide title myTitle para Klassische Rekursionsbeispiel Fakult tsfunktion next code define lambda n cond l n 0 1 e me T Ve a he next item 10 gt Next text number gt string 10 font40nmb 10 0 slide title myTitle item Grafikbeispiel code let x 100 hce append x 2 pin over circl
417. n Ausgabe Weg lambda Knoten cond null Knoten null t append Ausgabe Weg getprop Knoten Weg list Knoten 210 KAPITEL 2 KONSTRUKTIONEN Loescht den Knoten aus der Liste delete lambda Knoten Liste cond null Liste list equal Knoten car Liste delete Knoten cdr Liste t cons car Liste delete Knoten cdr Liste Erlaeuterung siehe Tabelle A Suche lambda cond null Liste eroeffnete Knoten null t set Analyse Knoten Get beste Knoten Liste eroeffnete Knoten set Liste eroeffnete Knoten delete Analyse Knoten Liste eroeffnete Knoten set Liste geschlossene Knoten cons Analyse Knoten Liste geschlossene Knoten cond eq Analyse Knoten Ziel Knoten Ausgabe Weg Analyse Knoten t set Arbeitsliste Get Nachfolger Analyse Knoten for each Offene Knoten Differenz Knoten Differenz Knoten Arbeitsliste Liste geschlossene Knoten Liste eroeffnete Knoten for each Neuberechnen offene Knoten Gemeinsame Knoten Arbeitsliste Liste eroeffnete Knoten A Suche Um Abbruchkriterium Fuer Ausgabe Weg zu haben putprop Start Knoten Weg list Initialisierung putprop Start_Knoten Entfernung vom Start 0 putprop Start Knoten Schaetzung Gesamtentfernung Entfernungsschaetzung Start gt Ziel Start Knoten Start der Hauptfunktion A Suche 2 2 ABBILDUNGSOPTION LISTE 211
418. n gt Eingabe Parameter gt A 12 Fall Krause Diese lambda Schnittstelle gestattet es z B die Aktenverwaltung zum Anzeigen der erfassten Aktenzeichen mit weniger Argumenten auf zurufen als beim Einf gen eines Aktenzeichens eval gt Aktenverwaltung Struktur zeigen gt Wahrend der Abarbeitung dieser Applikation sind folgende Bindungen gegeben Operation gt Struktur zeigen Parameter gt Da kein Argument hierf r angegeben ist wird der Ersatzwert angenommen Die globale Variable DATEN hat den aktuellen Bearbeitungsstand 2 3 ABBILDUNGSOPTION VEKTOR 227 d h den AVL Baum als Wert Wir sichern diesen mit Hilfe des einge bauten Konstruktes with output to file Das Laden des gesicher ten AVL Baumes erfolgt mit dem Konstrukt with input from file Diese beiden Konstrukte arbeiten mit einem lambda Konstrukt ohne lambda Variable thunk Abschnitt 1 2 3 S 103 Es wird ausgef hrt mit der angegebenen Datei als aktuelle Datenquelle bzw Datensenke eval gt define DATEN AVL Baum eval gt Sicherung des AVL Baumes with output to file D bonin scheme AVL dat lambda print DATEN eval gt Laden des AVL Baumes set DATEN with input from file D bonin scheme AVL dat lambda read Zum Verstehen der Aufgabe sind vorab Anforderungen Annahmen zum Entwurf und Testfalle formuliert Dabei verweist die Abktirzung A auf eine Anforderun
419. n San Franzisco Freeman Press 1977 Benoit B Mandelbrot The Fractal Geometry of Nature New York Freeman Press 1983 J B Marti A C Hearn M L Griss C Griss Standard Lisp Report ACM SIG PLAN Notices Volume 14 Number 10 1979 Ian A Mason The Semantics of Destructive LISP Menlo Park CSLI Lecture Notes Number 5 1986 Otto Mayer Programmieren in Common LISP Mannheim Wien Z rich Bibilogra phisches Institut 1988 W D Maurer The Programmer s Introduction to LISP New York London Ameri can Elsevier Reissued 1975 first 1972 John McCarthy Recursive Function of Symbolic Expression and Their Computa tion by Machine Part I Comm ACM 3 4 April 1960 pp 184 195 John McCarthy Paul W Abrahams Timothy P Hart Michael I Levin LISP 1 5 Programmer s Manual Massachusetts The M I T Press Second Edition Second printing January 1966 John McCarthy LISP Notes on Its Past and Future Conference Record of the 1980 LISP Conference Donald P McKay Stuart C Shapiro MULTI A LISP Based Multiprocessing System LISP Conference Stanford Redwood Est 1980 pp 29 37 Richard K Miller Computers for Artificial Intelligence A Technology Assessment and Forecast second edition SEAI Technical Publications ISBN 0 89671 081 5 1987 M Minsky A Framework for Representing Knowledge in PH Winston Ed The Psychology of Computer Vision New York McGraw Hill 1975 Richard Mitche
420. n dass die Information vom Konto Me yer AG sei ein Betrag von 67 23 abzubuchen im Sinne von Daten einem LISP System einzugeben ist Wir k nnen z B unterstellen es sei nur zu beschreiben dass abzubuchen ist aber die Buchung selbst ist nicht zu vollziehen weil das Konto Meyer AG noch nicht freigegeben ist Zun chst k nnte diese Information statt als Liste als Zeichenkette dem READ EVAL PRINT Zyklus bergeben werden eval gt Abbuchen Meyer AG 67 23 gt Abbuchen Meyer AG 67 23 Behalten wir jedoch die Liste bei dann d rfen die EVAL Regeln auf diese Liste nicht angewendet werden Die Auswertung ware zu blockie ren so dass Abbuchen nicht als Name einer Funktion interpretiert wird EVAL Regel 3 bietet die Moglichkeit anhand eines speziellen Sym bols uber die Auswertung der Argumente zu entscheiden Das speziel le Symbol quote repr sentiert diesen Auswertungsblocker Um EVAL Regel 3 zur Anwendung zu bringen muss die Liste als Argument ftir das spezielle Symbol quote geschrieben werden Wir formulieren daher eval gt quote Abbuchen Meyer AG 67 23 gt Abbuchen Meyer AG 67 23 Da das Einf gen eines symbolischen Ausdrucks in die Liste mit dem Auswertungsblocker quote als erstem Element h ufig vorkommt gibt es daf r eine Kurzschreibweise mit dem Hochkomma engl quote mark Es wird in der READ Phase zum eigentlichen QUOTE Konstrukt aufgel st eval gt Abbuchen Meyer AG 67 23 gt
421. n Beispiel befassen wir uns mit der Formulierung einer rekursiven lokalen Funkti on Dazu navigieren wir entlang eines Bin rbaums Abschnitt 1 3 3 S 124 Im vierten Beispiel schachteln wir rekursive Aufrufe Als Beispiel dient die Definition der Funktion Umdrehen Sie entspricht der einge bauten Funktion reverse Abschnitt 1 3 4 S 128 1 3 1 Funktionsanwendung auf die Restliste Beispiel Wortz hlung in einem Text mit einfacher Listenstruktur Es ist eine Funktion Wortzaehlung zu definieren die feststellt wie oft ein vorgegebenes Wort in einem beliebigen Text vorkommt der als Liste vorliegt Als Textbeispiel dient 7 Abs 1 BGB B rgerliches Gesetz buch eval gt define BGB 7 1 Wer sich an einem Orte st ndig niederl t begr ndet an diesem Orte seinen Wohnsitz eval gt Wortzaehlung Orte BGB 7 1 gt 2 eval gt Wortzaehlung Wohnsitz BGB 7 1 I Entsprechend der rekursiven Probleml sungs Methode suchen wir zun chst triviale F lle und ihre L sungen Danach ermitteln wir eine Konstruktionsvorschrift die das Problem in Richtung auf triviale F lle vereinfacht Bestimmung der Rekursions Route Der triviale Fall ist gegeben wenn der Text kein Wort enth lt Dann ist die L sung der Wert 0 Enth lt der Text W rter dann soll zun chst das erste Wort des Textes mit dem vorgegebenen Wort verglichen wer den Liegt bereinstimmung vor dann ist die gesuchte L sung um 1 gr er als da
422. n Kon strukt bilden das ausgehend von einer bestimmten Operation alle m g lichen Operanden zusammenfasst In diesem Fall ist die Matrixspalte die 1 2 KOMBINIEREN VON KONSTRUKTEN 53 Operationen Neuanlegen L schen Anmahnen Kunde Lieferant Kassenkonto Legende Zeilen oder spaltenorientierte Bildung von Konstrukten Tabelle 1 3 Matrix Operanden Operationen Klammer f r die Zusammenfassung zu einem Konstrukt Zu definieren sind dann die Konstrukte Neuanlegen L schen Anmahnen etc Das Konstrukt Neuanlegen ist auf Kunde Lieferant Kassenkonto etc anzuwenden Ist der Operand ein Kunde dann ist die Operation x auszuf hren Beim Operand vom Typ Lieferant ist es die Operati on x21 Es ist daher zwischen den verschiedenen Typen von Operanden zu unterscheiden F r diese Unterscheidung gibt es in LISP das cond Konstrukt conditional expression Diese Fallunterscheidung ersetzt ei ne tiefe Schachtelung von if Konstrukten Bevor wir die Struktur von Neuanlegen definieren wird vorab das cond Konstrukt erl utert Konditional Konstrukt cond Das cond Konstrukt w hlt die zutreffende Bedingung aus einer Menge beliebig vieler Bedingungen aus Es entspricht einer Eintreffer Entschei dungstabelle lt gt S 80 und hat folgende Struktur eval gt cond lt p gt lt Sexpri gt lt SeXprim gt lt p2 gt lt S XProj gt lt S Xprog gt pi gt lt Sexpri gt se lt Sexprjj gt
423. n R ckgabewert Stets wird die Applikation der lt user_func tion gt auf die einzelnen Argumente von lt arguments gt durchgef hrt lt user_function gt lt argument 1 gt gt lt value gt lt user_function gt lt argument n gt gt lt valuen gt Gegebenenfalls wird anschlie end aus lt value gt bis lt value gt der R ckgabewert gebildet z B eine Liste Bei den map Konstrukten besteht die eigentliche Iteration in der Wie derholung der Anwendung von lt user_function gt auf die einzelnen Ar gumente Dabei ist lt user_function gt eine Funktion mit einer lambda Variablen d h eine Funktion definiert f r ein Argument engl unary function Da das map Konstrukt diese lt user_function gt als Argument hat ist es selbst eine Funktion h herer Ordnung Eine Funktion h herer 1 2 KOMBINIEREN VON KONSTRUKTEN 101 Ordnung engl higher order function ist eine Funktion die entweder eine Funktion als Argument hat und oder eine Funktion als Rtickga be Wert Der Vorteil dieser map Iteration ist das Abstrahieren von den Details wie die einzelnen Argumente der Reihe nach selektiert werden und die Abbruchbedingung gepr ft wird Das folgende Beispiel Sachmittelplanung einer Beh rde S 101 demonstriert die beiden mapping functions Das map Konstrukt und das for each Konstrukt eval gt map list 1 2 3 gt 1 2 3 eval gt for each print 1 2 3 gt 123 Beide
424. n SubclassA C zugreifbar Chart Discriminator Konstrukt S 432 Foo Abbildung 3 7 UML Generalisierung amp Spezialisierung man z B eine Klasse Schiff in die Klassen Containerschiff Tanker und Autotransporter dann ist der Diskriminator die La dungsart Das folgende Konstrukt Chart Discriminator nutzt die primiti ven Grafik Komponenten hline vline rectangle text und bit map Das Zusammenf gen dieser primitiven Grafik Komponenten erfolgt in vertikaler Richtung mit vc append und in horizontaler mit hb append und ht append Das pin over Konstrukt erm glicht Gra fik Komponenten bereinander zu zeichen Mit blank wird die Positio nierung beim Zusammenf gen beeinflusst Chart Discriminator3 Konstrukt eval gt define Chart Discriminator let MyFont make object font 40 modern normal bold vc append pin over rectangle 200 100 50 20 3 3 NOTATION MIT UML 433 text Foot MyFont 50 0 0 bitmap build path D bonin scheme image Vererbungspfeil gif hb append 200 text Discriminator null 30 0 0 vline 0 100 blank 175 0 hline 800 0 ht append 400 vline 0 100 vline 0 100 vline 0 100 ht append 20 pin over rectangle 400 100 50 20 text SubclassA MyFont 50 0 0 pin over rectangle 400 100 50 20 text SubclassB MyFont 50 0 0 pin over rectangle 400 100 50 20 text SubclassC MyFont 50 0 0 eval gt Chart
425. n Symbol in Liste zerlegen Explode lambda Symbol letrec String symbol gt string Symbol Laenge string length String Sprengen lambda tring Position cond Laenge Position list lt Position 1 Laenge cons string gt symbol substring String Position Position 1 Sprengen String Position 1 Pee Sprengen String 0 Hilfsfunktion aus Liste Symbol erzeugen S Laenge 0 Implode lambda Liste cond 1 length Liste car Liste t string gt symbol string append symbol gt string car Liste symbol gt string Implode cdr Liste Konvertierung der Matchvariablen in eine zweielementige Liste Analyse Literal Atom lambda Liste cond null Liste list symbol car Liste let Alle Zeichen Explode car Liste Match Typ car Alle Zeichen Match Variable cond null cdr Alle Zeichen list t Implode car Alle Zeichen cond eq Match Typ 2 4 ABBILDUNGSOPTION ZEICHENKETTE UND SYMBOL 297 cons list Match Variable Analyse Literal Atom cdr Liste eq Match Typ cons list Match Variable Analyse Literal Atom cdr Liste t cons car Liste Analyse Literal Atom edr Liste t display Nicht implementiert display car Liste Pr dikate Symbol lambda x and pair x eq car x
426. n im Abschnitt 3 3 S 418 erl uterten Konstrukte werden bei der LISP Slideshow genutzt Dar ber hinaus verwenden wir das para Konstrukt Es definiert einen Absatz Paragraph der seinen Text mit Umbruch darstellt Das folgende Beispiel Zitat verdeutlicht dieses Konstrukt Zus tzlich nutzt es noch die Kommentierungsm glichkeit mit Hilfe des comment Konstruktes Modul Zitat eval gt module Zitat scheme require slideshow slide he append 20 text Siehe Vorwort null 18 0 para 440 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN width 600 align right Nutzliche Produkte entstehen kaum per Zufall Sie erfordern einen Sorgsam geplanten Herstellungsprozess wenn es gilt sie wirtschaftlich in gewunschter Qualitat termingerecht zu produzieren comment Software Produkt eval gt require Zitat gt Abbildung 3 9 S 439 Um die Ausf hrung einer Berechnung im slide Konstrukt zu zei gen definieren wir die Fakult tsfunktion das klassische Beispiel einer Rekursion eval gt define lambda cond n1 eval gt 10 gt 3628800 Nun l sst sich mit dem fiktiven Storyboard folgende Slideshow de finieren Modul LISP Slideshow Ein Pl doyer f r LISt Processing Version 1 0 module LISP Slideshow scheme require slideshow require slideshow flash require slideshow code require scheme class scheme gui base require scheme date Fakulta
427. ncisco u a McGraw Hill 1989 Martin C Henson Elements of Functional Languages Computer Science Texts Oxford London u a Blackwell Scientific 1987 Wolfgang Hesse Hans Keutgen Alfred L Luft H Dieter Rombach Ein Begriffs system f r die Softwaretechnik in Informatik Spektrum Heft 7 1984 S 200 223 Arbeitskreis Begriffsbestimmung der Fachgruppe Software Engineering im FB 2 der GI C A R Hoare Recursive Data Structures International Journal of Computer and Information Sciences Vol 4 No 2 1975 pp 105 132 Douglas R Hofstadter Metamagikum in Spektrum der Wissenschaft April 1983 S 14 19 Mai 1983 S 13 19 Juni 1983 S 10 13 Juli 1983 S 6 10 Original in Scientific American 1983 Frederick Holtz LISP the language of artificial intelligence TAB Books Inc 1985 Ellis Horowitz Fundamentals of Programming Language Second Edition Berlin Heidelberg u a Springer 1984 Sheila Hughes TerminalBuch LISP M nchen Wien R Oldenbourg Verlag 1987 Michael Hu mann Peter Schefe Andreas Fittschen Das LISP Buch Hamburg McGraw Hill 1988 Takayasu Ito Robert H Halstead Jr Eds Parallel Lisp Languages and Sy stems Proceedings US Japan Workshop on Parallel LIsp Sendai Japan June 5 8 1989 Lecture Notes in Computer Science 441 Berlin Heidelberg u a Springer Verlag 1989 M A Jackson Grunds tze des Programmentwurfs 7 Auflage 1986 Darmstadt Originaltitel Princip
428. nd eq Bl J cond eq B2 J cond eq B4 J A5 t cond eq B3 J Al t A3 A5 t A4 t cond eq B3 J A2 t cond eq B4 J A3 A5 t Al Legende Tabelle 1 15 S 83 Bedingungen und Aktionen innerhalb des ET Konstruktes als lokale Funktionen definiert Tabelle 1 17 Programm ET Auszahlung buchen funktional 1 2 KOMBINIEREN VON KONSTRUKTEN 107 Begrenzte Eintreffer ET mit lokalen Konstanten eval gt define ET Auszahlung Buchen let B1 begin print Ist die Kontonummer angegeben J N read B2 begin print Ist die Kontonummer kleiner gleich 40000 J N read B3 begin print Ist der Betrag groesser gleich 50 00 EUR J N read B4 begin print Ist der Zweck angegeben J N read Al print Dem Chef vorlegen A2 print Zurueck an die Fachabteilung schicken A3 print Umkontieren auf Konto SONSTIGES A4 print Vorgang an Abteilung 2 abgeben A5 print Buchung vollziehen Regeln lambda cond eq eval Bl J cond eq eval B2 J cond eq eval B4 J eval A5 t cond eq eval B3 J eval A1 t eval A3 eval A5 t eval A4 t cond eq eval B3 J eval A2 t cond eq eval B4 J eval A3 eval A5 t eval Al Legende Tabell
429. nd Design with Applications 2nd ed Red wood City Benjamin Cummings 1994 Deutsche Ausgabe Objektorientierte Analyse und Design Mit praktischen Anwendungsbeispielen Bonn Addision Wesley 1994 Edmund C Berkeley Daniel G Bobrow Editors The Programming Langua ge LISP Its Operation and Applications The M I T Press 1966 First printing March 1964 Gerhard Bitsch Wie man in LISP programmiert Eine Einf hrung anhand von PC Scheme 3 0 CHIP Wissen W rzburg Vogel Buchverlag 1989 Daniel G Bobrow Requirements for Advanced Programming Systems for List Pro cessing Communications of ACM Vol 15 Number 7 July 1972 pp 618 627 Daniel G Bobrow Kenneth Kahn Gregor Kiczales Larry Masinter Mark Stefik Frank Zdybel Common Loops Merging Lisp and Object Oriented Programming in ACM Proceedings OOPSLA86 SIGPLAN Notices 21 11 1986 p 17 29 Daniel G Bobrow David Moon u a Common Lisp Object System Specification ANSI X3J13 Document 88 002R American National Standards Institute Washing ton DC Juni 1988 veroffentlicht in SIGPLAN Notices Band 23 Special Issus September 1988 Barry W Boehm Software Engineering Economics New Jersey 1981 Hinrich Bonin Die Planung komplexer Vorhaben der Verwaltungsautomation Heidelberg R v Decker amp C E M ller 1988 Band 3 der Schriftenreihe Verwal tungsinformatik Hinrich Bonin Objekt orientierte Programmierung mit LISP Arbeitsbericht 1988
430. nd die Begriffe Verwendungskontext und Zusi cherung 3 3 NOTATION MIT UML 423 Ein Paket beinhaltet eine Ansammlung von Bausteinen beliebigen Typs h ufig jedoch nur Klassen Mit Hilfe von Paketen wird ein kom plexes Gesamtmodell in berschaubarere Einheiten gegliedert Jeder Baustein geh rt genau zu einem Paket Wir programmieren diese UML Notation f r die Klasse Konto als Konstrukt Chart Konto Al1 Mit der Evaluierung dieses Konstruktes erhalten wir die Abbildung 3 3 S 422 Chart Konto A113 Konstrukt Hier nutzen wir das rame Konstrukt um das Rechteck abzubilden und definieren f r die verschiedenen Texte passende Fonts eval gt define Chart Konto All let fontB make object font 40 modern normal bold fonts make object font 20 modern italic normal fontN make object font 20 modern normal normal width 850 0 frame vc append text lt lt stereotyp gt gt fontI 30 0 0 hc append 0 text paket fontN 50 0 0 text Konto fontB 50 0 0 text Merkmal fontI 30 0 0 hline width 20 0 text variable Typ initialwert merkmal zusicherung fontN 30 0 0 hline width 20 0 text methode param Typ initialwert u fontN 30 0 0 text 16Verwandte Begriffe f r das Paket sind die Begriffe Klassenkategorie Subsystem und Package 424 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN i R ckgabetyp merkmal zusicherung fontN 30 0 0
431. nd ist entscheidend f r die Objektdefinition und f r die Objektverwendung Die Einkapselung engl encapsulation hat deshalb nur die Implementation zu verbergen und nicht den internen Objektzustand Die Zusammenfassung aller Implementationsinformatio nen zu einem Objekt Programmst ck und deren Abschirmung gegen direkte Zugriffe von anderen Programmteilen aus sichert die Modifizier barkeit eines Objektes Neben und Fernwirkungen einer Objekt nderung sind dadurch begrenzbar W re jedoch eine Optimierung der Effizienz gefordert dann h tte eine Streuung der Informationen ber die Imple mentationsdetails an viele Programmstellen Vorteile Umwege ber die Schnittstelle d h hier ber den Nachrichtenversandmechanismus w ren einsparbar Mutator Wie Selektoren werden auch Mutatoren generiert die ber das send Konstrukt anwendbar sind eval gt send A001 set Name Inhaber Emma Musterfrau eval gt send A001 get Name Inhaber gt Emma Musterfrau eval gt send A001 set Kontostand 100000 00 gt ERROR 7 Nicht public send no such method set Kontostand for class Konto Die anwendungsspezifischen Mutatoren Add Einzahlung und Add Auszahlung bauen wir mit den Pradikaten Buchungsdatum und Betrag in die Klasse Konto S 334 ein Dabei greifen wir innerhalb der Klasse mittels der Selektoren auf die einzelnen Slots zu 334 KAPITEL 2 KONSTRUKTIONEN Klasse Konto eval gt define Konto class o
432. nderung L schung Sperrung Recherche require only in Journal Eintragung only in Vertraulichkeit berpr fung Verschl sselung Entschl sselung define effects 418 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Speichern und Bereitstellen von Akten define Neuzugang lambda Aktenzeichen Vorgang Berechtigung define effects Neuzugang legt eine Akte an falls unter dem Aktenzeichen noch keine gespeichert ist und ergibt den Berechtigungscode define constraints Zur Datensicherheit f hrt ein korrekter Neuzugang zum sofortigen R ckschreiben des Datensatzes in die Datei define side effects Das Journal weist jeden Aufrufmit Vertraulichkeitsstufe gr er Klasse V aus define nderung lambda ses ssa define L schung Lambda ss sa define Sperrung lambda define Recherche lambd2 ace 22 3 3 Notation mit UML Die Qualit t eines Programms h ngt von der Qualit t der Modelle ab die die Objekte der Anwendungswelt sowie die Benutzer Anforderung en abbilden Erst die richtigen Objekte mit den richtigen Beziehun gen f hren zum gelungenen Programm Kurz Fehler im Modell Feh ler im Programm Insbesondere f r die objekt orientierte Analyse und den objekt orientierten Entwurf wurden zu Beginn der 90iger Jahre ver schiedene Konzepte und Methoden mit ihren speziellen Notationen Gra fiksymbolen entworfen Aus solchen Methoden und Notationen
433. ndow System e Kyoto Common LISP http www cs cmu edu afs cs project ai repository ai lang lisp impl kcl1 0 html Zugriff 22 Jan 2010 A 2 SOFTWARE 465 Rechnerklasse Workstation Hersteller Kyoto Common LISP KCL wurde am Research Institute for Ma thematical Sciences Kyoto University Japan entwickelt Merkmale KCL ist ein vollst ndiges Common LISP Es hat bei geladenem Interpreter und Compiler einen Bedarf von 1 4 Megabyte Arbeitsspeicher Der Kern von KCL ist in C geschrieben KCL hat einen zweistufigen Compiler Zun chst wird nach C umgesetzt und dann von C in den compilierten Code e Le_LISP http www softwarepreservation org projects LISP lelisp doc lelisp15 25 refman en pdf Zugriff 22 Jan 2010 Rechnerklassen Mainframe IBM unter VM UTS Workstation PC Hersteller Le_LISP wurde im Europ ischen KI Zentrum INRIA Frankreich entwickelt Die Portierung auf PCs erfolgte durch Act Informatique Merkmale Eine gro e Untermenge von Common LISP ist abgedeckt Das Konzept der virtuellen Maschine erleichtert eine Portierung zwischen den Rechnerklassen Le_LISP enth lt ein Paket Konzept Stringverarbeitung Vek toren und Konstrukte f r nicht lokale Kontrollstrukturen e Lucid Common LISP http www lispworks com products lcl html Zugriff 22 Jan 2010 Rechnerklasse Workstation Hersteller Lucid Inc 707 Laurel Street Menlo Park CA 94025 USA
434. ne KONTROLLWISSEN BEI H null eval gt define H lambda N eall ce lambda Fortsetzung set KONTROLLWISSEN BEI H Fortsetzung display Funktion H eval gt F G H Foo Funktion H 7 Funktion G 8 Funktion F 9 10 eval gt KONTROLLWISSEN BEI H gt lt continuation gt Der Datentyp hat keine aussage F hige externe Darstellung daher diese Ersatzdarstellung analog zur lt procedure gt Die gespeicherte lt continuation gt kann nun erneut ausgef hrt werden d h wir setzten wieder bei H auf Der Wert von H also das Re sultat der bisherigen Verarbeitung ist als Argument angebbar eval gt KONTROLLWISSEN BEI H 8 gt Funktion G 8 Funktion F 9 10 Die Continuation KONTROLLWISSEN BEI H kann mit einem an deren Wert als 8 appliziert werden d h die ausstehende Berechnung ist von der Stelle H mit einem neuen Wert durchf hrbar Wir springen quasi in die Berechnung mit einem neuen Startwert zur ck 288 KAPITEL 2 KONSTRUKTIONEN eval gt KONTROLLWISSEN BEI H 13 gt Funktion G 13 Funktion F 14 15 Der Contiunation Mechanismus erm glicht einerseits Spr nge aus ei ner Berechnung heraus andererseits Spr nge in eine Berechnung hin ein Etwas salopp formuliert Berechnungen sind jederzeit einfrierbar und jederzeit auftaubar Legen wir eine Berechnung auf Eis dann sind die schon vollzogenen Bindungen von Variablen miteinzufrieren Erst die korrekte Behandlung dieser ak
435. ner Li ste wobei n 0 das erste Element der Liste selektiert d h dem car Konstrukt entspricht Die Positionszahlung der Elemente beginnt mit Null Das 1ist ref Konstrukt ist zero based eval gt list ref a b c 2 eval gt list ref a bc 0 gt Cc a Haufig hat dieser Selektor den Namen nth nth element of list Ihn gibt es allerdings mit unterschiedlichen Schnittstellen In Common LISP lt gt 174 hat er die Parameterfolge nth lt positionsnummer gt lt lis te gt In TLC LISP gilt die umgekehrte Reihenfolge nth lt liste gt lt po sitionsnummer gt Dar ber hinaus kommt er in der Auspr gung zero based oder one based vor 1 3 REKURSION ALS PROBLEMLOSUNGSMETHODE 127 Beratungssystem konstruiert mit dem Binarbaum lt frage gt lt ja baum gt lt nein baum gt eval gt define Beratungssystem lambda Baum letrec Selektor Ja Baum lambda x list ref x 1 Selektor Nein Baum lambda x list ref x 2 Selektor Frage lambda x car x Selektor Baumblatt lambda x car x Baumblatt lambda x eq 1 length x Zustimmung lambda case read J JA Y YES T t else f Verzweigung lambda cond Zustimmung Selektor Ja Baum t Selektor Nein Baum System Frage lambda x print Selektor Frage x System Antwort lambda x print Systemantwort newline Selektor Baumblatt x Navigation lambda x cond
436. ner laufenden Nummer Jede gensym Applikation erhoht die lau fende Nummer lt string gt Die Zeichenkette wird als Suffix Anhang des Symbolnamens verwendet lt symbol gt lt uninterned symbol gt Ein neues nicht intern gemachtes Symbol eval gt define Foo gensym eval gt Foo gt 9754 eval gt define Bar gensym eval gt Bar gt 9755 eval gt symbol Foo gt t eval gt eq Foo qg754 gt Achtung Keine Gleichheit trotz gleichen PRINT Namens eval gt eq Foo Foo gt t eval gt define Baz gensym 754 eval gt Baz gt 754756 eval gt define Foo gensym Baz eval gt Foo gt 754756757 Wollen wir ein nicht interngemachtes Symbol mit vorgegebenen Namen generieren dann ist das string gt uninterned symbol Kon strukt zu verwenden eval gt define Foo string gt uninterned symbol M O R E eval gt Foo gt M OR E eval gt eq Foo M O R E gt f Im Vergleich dazu zeigt das folgende Beispiel den Effekt des Intern machens eval gt define Foo string gt symbol M O R E eval gt Foo gt M OR E eval gt eq Foo M O R E gt t Beispiel Pseudo Code Vor bersetzer In Kapitel 1 ist f r die Alternative und die Iteration eine Notation ange geben die h ufig in den ersten Phasen des Lebenszyklus eines Software Produktes lt gt Abbilung 1 13 S 51 eingesetzt wird Man spricht in die sem
437. ngs Um gebung in der das Symbol Meyer AG den assoziierten Wert hat der zu ver ndern ist F r die gew nschte Funktion Abbuchen ben tigen wir ein Konstrukt zum Erzeugen einer Liste Bisher haben wir Listen direkt notiert und nicht mit einem Konstrukt erzeugt Jetzt nutzen wir den eingebauten Konstruktor list 1ist Konstrukt Es hat als Wert eine Liste gebildet aus den Werten seiner Argumente eval gt list lt sexpr gt lt sexpry gt gt lt value gt lt value gt 44 KAPITEL 1 KONSTRUKTE eval gt list A B C gt ABC eval gt list gt eval gt list list gt eval gt list set Meyer AG 12 34 gt set Meyer AG 12 34 eval gt list set Meyer AG 50 39 gt set Meyer AG 11 Die Funktion Abbuchen l sst sich mit dem list Konstrukt und dem eval Konstrukt wie folgt notieren eval gt define Abbuchen lambda Konto Name Abbuchungsbetrag eval list set Konto Name eval Konto Name Wert von Konto Name Abbuchungsbetrag gt eval gt define Meyer AG 100000 0 eval gt Abbuchen Meyer AG 300000 0 eval gt Meyer AG gt 200000 0 eval gt Abbuchen Meyer AG 400000 0 gt 600000 0 Das Abbuchen Konstrukt definiert auf der Basis des Lambda Kon struktes gibt nicht nur einen Wert zur ck sondern ver ndert auch den Wert seines ersten Arguments Die Schnittstelle Abbildung 1 11 S 34 wird durch die be
438. nkt der Ver erbung Hierbei ist zwischen statischer und dynamischer Vererbung zu unterscheiden Einige der vielf ltigen Optionen der Vererbung verdeutlichen wir an hand der Erweiterung unserer Kontenverwaltung Abschnitte 2 7 319 Die Klasse Verwahrkonto erbt zus tzlich zu den Eigenschaften der Klasse Konto die Eigenschaften einer Klasse Offener Vorgang Die Klasse Offener Vorgang definiert z B f r die Klasse Verwahr konto das bisher nicht vorhandene Feld Aktenzeichen 2 8 KLASSE INSTANZ MODELL 329 2 8 1 Object Oriented Programming System Im Folgenden nutzen wir zun chst Optionen des class Konstruktes von PLT Scheme mit der Entwicklungsumgebung von DrScheme Version 4 2 3 Dez 2009 Den Zugriff auf die Slots einer Instanz d h auf ih ren lokalen Wert erfolgt mit Hilfe des send Konstruktes Die Selektoren und Mutatoren sind an das jeweilige Objekt Instanz oder Klasse im Sinne einer Nachricht zu senden In der funktions gepr gten Terminologie formuliert Das send Kon strukt hat als Argumente das Objekt den Operationsnamen und gege benenfalls Argumente f r die Operation Weil wir einen Selektor oder Mutator mit dem send Konstrukt an ein Objekt bermittelt betrach ten wir diese in der objekt gepr gten Terminologie als eine Nachricht engl message die das Objekt empf ngt und verarbeitet Aus der Kommunikationsicht Nachrichten bermittlung k nnen wir formulieren Empf ngt ein Objekt eine N
439. noten der bereinig ten Arbeitsliste an den Anfang von Liste eroeffnete Kno ten Die zun chst aus Liste eroeffnete Knoten gestrichenen Kno ten kommen dadurch wieder in die Liste eroeffnete Knoten je doch in der Reihenfolge von Arbeitsliste Zum Verstehen der Aufgabe sind vorab Anforderungen Annahmen zum Entwurf und Testf lle formuliert Dabei verweist die Abk rzung A auf eine Anforderung die Abk rzung E auf eine Annahme zum Entwurf und die Abk rzung T auf einen Testfall A1 Depth first Search durchsucht ein angegebenes Knotennetz nach einem Weg von einem Start zu einem Ziel Knoten A1 1 Der erste selektierte Nachfolger wird zun chst weiter analy siert expandiert bevor die weiteren Nachfolger expandiert werden Zweck Tiefengewinnung A1 2 Es sind ein Start und ein Zielknoten anzugeben 202 eval gt Ana ly sek append Legende Reihenfolge der Depth first Search H F Liste eroeffnete Knoten H KAPITEL 2 KONSTRUKTIONEN Liste ge schlossene Konten putprop H Weg C G putprop C Weg putprop G Weg G D A E G putprop D Weg putprop A Weg putprop E Weg A E G A E G EG B E G putprop B Weg E G E G putprop E Weg G F U G putprop F Weg putprop U Weg U G Ausgabe Weg putprop und getprop F Weg E E GF E B A D G IH getprop Anw
440. ns A B gt f verschiedene cons Zellen equal cons A B cons A B gt t pruft Wertegleichheit zero 2 2 gt t pruft numerisch 0 gt t pruft auf leere Liste gt t Alles ungleich f ist wahr member B A B gt B C benutzt equal memq list B A B C gt f benutzt eq procedure lambda OK gt t pruft ob Funktion lt lt gt gt even odd f r Zahlen define Anzahl lambda L cond null L 0 1 Klausel t 1 Anzahl cdr L 2 Klausel Anzahl Er Sie Es gt 3 and 1 2 3 gt true da ungleich f and null E 7 0 gt Abbruch nach null Erkennung 3 1 A 3 PLT SCHEME UBERSICHT 473 or 2 1 0 gt 2 Abbruch bei 2 weil t Konto S1 gt t is a Il Konto gt t Sequenz und Iteration define Foo begin A B 3 4 2 3 Foo gt 5 begin gibt letzten Wert zuruck define Foo begino A B 3 4 2 3 Foo gt A B beginO gibt ersten Wert zur ck map lt funktion gt lt liste gt gt wendet die Funktion auf jedes Element der Liste an und gibt die Ergebnisse als Liste aus map lambda x 2 x 1 2 3 gt 3 45 do Al lt var able 1 gt zanrangswert gt lt Steps s 4 lt praedikat gt lt sexpr l gt lt sexpr n gt Abbruchklausel lt body gt gt lt value sexpr n gt
441. nstrukt selektiert den Wert einer angegebenen Eigenschaft Die P Liste ist global Dies hat Vor und Nach teile Vorteilhaft kann die P Liste zur Kommunikation zwischen Kon strukten genutzt werden Nachteilig ist die Gefahr ungewollter Nebenef fekte Charakteristische Beispiele f r Abschnitt 2 2 Zirkul res Punkt Paar eval gt Zirkul res Punkt Paar Genutzte Bibliotheken von Scheme R6RS require rnrs base 6 eval gt require rnrs mutable pairs 6 eval gt define Endlos cons A B eval gt set cdr Endlos Endlos 212 KAPITEL 2 KONSTRUKTIONEN eval gt A Search HU ZZ SH 0720 Hauspoststation x Koordinate y Koordinate C a O ee esl le AO es a Applika tion von Schaet Ofrene Zune Knoten Gesamt auf den entfern Knoten D 1 A5 E5 5 H 14 CEAS E G 1 5 C 5 5 B 4 5 U 3 C 1 Mesa 5 Achtung Neuberechnen offene Knoten f rE 2245 19 5 C 5 5 4 5 U 3 E A D C E 25 5 24 0 A 8 5 4 5 B A D E 2285 2245 CE UBAD B U U Ziel_Knoten Legende B ro Daten Programm in Tabelle 2 5 S 199 A Programm S 207 Tabelle 2 7 Applikation des Of fene Knoten Konstruktes in A bei Startknoten H Zielknoten U 2 2 ABBILDUNGSOPTION LISTE eval gt set car Endlos LISP Das ultimative Modell eval gt Endlos 0 LISP Das ultimative Modell 0 eval gt list ref Endlos 100 gt LISP Das ultima
442. nt 3 set ARBEITSPLAN cdr ARBEITSPLAN Element 1 Element 2 Element 3 set ARBEITSPLAN cons Neue Element ARBEITSPLAN T I T 2 Element 3 d Legende cons Zelle o Zeiger Adresse null Zeiger entspricht o null Abbildung 2 3 set Konstrukt nderung des Zeigers auf eine exi stierende cons Zelle 166 KAPITEL 2 KONSTRUKTIONEN Beispiele f r set car und set cdr eval gt define Foo abcd eval gt set car Foo 2 3 eval gt void set cdr Foo x y gt Ft eval gt Foo gt 6 x y eval gt set cdr Foo 3 3 eval gt Foo gt 6 9 Die Mutatoren set car und set cdr k nnen Transparenz Pro bleme bewirken Nicht leicht durchschaubare Nebeneffekte sind formu lierbar wie das folgende Beispiel zeigt eval gt define Foo cons cons t t cons t t eval gt Foo gt t t t t eval gt define Bar let x cons t t eons x amp eval gt Bar gt t t t t eval gt equal Foo Bar gt t eval gt set cdr cdr Foo Neu eval gt set cdr cdr Bar Neu Nachdem sowohl auf Foo wie auf Bar die gleiche set cdr Formu lierung angewendet wurde erwartet man spontan dass Gleiches wei terhin gleich ist d h equal Foo Bar weiterhin den Wert true hat Dies ist jedoch nicht der Fall eval gt equal Foo Bar gt f eval gt Foo gt t t
443. nten Offene Posten gt f g a Als weiteres Beispiel f r die Abbildungsoption P Liste betrachten wir im folgenden ein B rogeb ude Abbildung 2 12 S 200 Die Akten Gesch ftsvorf lle werden in Laufmappen transportiert Den Transport bernimmt ein mechanisches Flie bandsystem Zu seiner elektronischen Steuerung ist ein Weg zwischen der jeweiligen Startstation und der an gegebenen Zielstation zu bestimmen Aufgabe des LISP Programmes ist es einen solchen Weg zu ermitteln 198 KAPITEL 2 KONSTRUKTIONEN Beispiel Laufmappen Transportsteuerung Entsprechend der Buroskizze Abbildung 2 12 S 200 ist f r jede Hauspoststation eine P Liste definiert Programm in Tabelle 2 5 S 199 Sie enth lt 1 als Eigenschaft Ort die Lage der Poststation angegeben in x y Koordinaten und 2 als Eigenschaft Nachfolger die Hauspoststationen die direkt er reicht werden k nnen sowie ihre Entfernung als A Liste Wir unterstellen dass stets nur eine Laufmappe transportiert wird und die einzelnen Stationen diese Laufmappe durchschleusen bzw aufneh men k nnen Wir reduzieren damit das Problem auf eine einfache Wege suche Zun chst sei dar ber hinaus nur gefordert dass ein m glicher Weg zwischen Start und Ziel gefunden wird Dieser Weg muss nicht der k rzeste Weg sein Als Probleml sung bilden wir das Verfahren Tiefensuche engl depth first search ab Die Bezeichnung Tiefe geht von einem Suchbaum azy kli
444. nuations Member Restliste Marke CATCHER CONTINUATIONS Get C lambda cadr car Continuations 302 KAPITEL 2 KONSTRUKTIONEN cond null Continuations error Keine catch Marke Marke t set CATCHER CONTINUATIONS cdr Continuations Get C Sexpr Wir definieren nun ein simples Konstrukt 1 und erhalten mit der Ma kroexpansion das folgende Aquivalent eval gt define f1 catch Foo 2 3 eval gt define f1 lambda let C gensym eall ce lambda C set CATCHER CONTINUATIONS cons list cadr Foo 2 3 C CATCHER CONTINUATIONS cons begin cddr Foo 2 3 eval gt eval fl gt lt procedure f1 gt eval gt f1 gt call cc lambda g725 set CATCHER CONTINUATIONS cons list Foo g725 CATCHER CONTINUATIONS begin 2 3 eval gt begin 1 5 eval catch Foo 2 3 throw Foo 4 5 gt 15 Beispiel Sich selbst reproduzierendes Konstrukt eval gt define Selbst lambda Sexpr list Sexpr Sexpr lambda Sexpr list Sexpr Sexpr eval gt Selbst gt lt procedure Sexpr gt lt procedure Sexpr gt eval gt eval eval eval Selbst gt lt procedure Sexpr gt lt procedure Sexpr gt eval gt equal Selbst eval Selbst gt t Beispiel Berechnung der L nge einer Liste eval gt define Compose 2 5 ABBILDUNGSOPTION FUNKTION MIT UMGE
445. nzfrei sind eval gt define Einfach durchfuhrbar lambda nderung and Vertraute Dokumentaions Gliederung BENUTZER Verstehbar nderung Explizites Verweissystem DOKUMENTATION Die Eigenschaft Zur ckf hrbarkeit bezieht sich auf die Konstruktions Prozessdokumentation Wir wollen zu einer Aussage in einem Dokument die zugeh rigen Aussagen in der Kette der vorher gehenden Dokumente auffinden Die Zur ckf hrbarkeit verlangt dass wir z B aus einem Kon strukt im Quellcodetext die betreffende Anforderung im Pflichtenheft identifizieren k nnen Die einzelnen Dokumente d rfen kein Konglomerat d h kein bunt zusammengew rfeltes Papierwerk bilden Erst eine gegenseitige Abstim mung Arbeitsteilung der einzelnen Dokumente macht eine Doku mentation handhabbar Die Eigenschaft Handhabbarkeit betrifft den Um fang jedes einzelnen Dokumentes Ein adressaten und zweckgerechter Umfang ist nur erreichbar wenn wir problemlos auf Aussagen anderer Dokumente verweisen k nnen Die Vor und R ckw rtsverkettung verbessert die Modifizierbarkeit Zur ckf hrbarkeit und Handhabbarkeit der Dokumentation Vorausset zung ist dazu dass jedes Dokument und jede Aussage in jedem Doku ment mit einem eindeutigen Bezeichner Identifier versehen ist Wir notieren daher keine berschrift f r ein Kapitel einen Abschnitt oder Unterabschnitt keine Unterschrift f r eine Abbildung Zeichnung oder Tabelle und keine wesentliche Auss
446. o MyFont 50 0 0 vline 0 0 200 hline 300 0 0 0 eval gt Chart Konto gt Abbildung 3 2 S 419 Die M glichkeit pict Objekte bereinander ausgeben zu k nnen ver k rzt das Chart Konto Konstrukt wie folgt Das pin over Konstrukt hat als 2 und 3 Parameter dx dy die Verschiebung des berlagernden Grafikobjektes 4 Parameter gegen ber dem Bezugsobjekt 1 Parame ter eval gt define Chart Konto pin over rectangle 300 100 50 20 text Kontos make object font 40 modern normal bold 50 0 0 Eine abstrakte Klasse ist eine Klasse die eine Basis f r Unterklas sen bildet Eine abstrakte Klasse hat keine Instanzen Objektexemplare Sie wird als eine normale Klasse mit dem Merkmal abstract no tiert Eine Metaklasse dient zum Erzeugen von Klassen Sie wird wie eine normale Klasse notiert und erh lt den Stereotyp lt metaclass gt Ein Merkmal ist ein Schl sselwort aus einer in der Regel vorgegebe nen Menge das eine charakteristische Eigenschaft benennt Ein Merk mal steuert h ufig die Quellcodegenerierung 13 Alternativ zu dieser Kennzeichnung kann der Klassenname auch kursiv dargestellt wer den 14N heres zur Programmierung mit Metaobjekten z B 103 422 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN lt lt stereotyp gt gt oO paket Kontos Merkmal variable Typ initialwert merkmal zusicherung methode param Typ initialwert R ckgabetyp merkmal
447. o Hello World define public get Foo lambda oo super new define public get Instance lambda instance super new define public get Attribute lambda attribute define public get Levelliz lambda LevelII super new define public get Slot lambda slot define public get Levells lambda LevellI super new Den Modul 00 nutzen wir indem wir Nachrichten mit dem send Kon strukt an anonyme Objekte aus seiner exportierten Klasse Leve1 0 schik ken Zum Schluss steht als Ergebnis das klassische Hello world eval gt require O00O eval gt send new send new Level0 3 6 AUSBLICK 455 get LevelI get Slot gt Level0 eval gt send new send new Level0 get LevelI get Attribute gt LevellI eval gt send send new send new send new Level0 get LevelI get LevellII get Instance get Foo gt Hello World 3 6 Ausblick eder Text von derartiger L nge und Tiefe verlangt ein abschlie en des Wort f r seinen getreuen Leser Es w re nicht fair nach 455 Sei ten die n chste aufzuschlagen und dann den Anhang zu finden Daher zum Schluss ein kleiner Ausblick LISP ist und bleibt eine m chtige und offene Programmiersprache mit vielen Konzepten und M glichkeiten Sie haben sich einen gro en Ausschnitt davon erarbeitet Buchstabieren mit LISP Konstrukten f llt Ihnen nicht schwer apply begin call cc d
448. oder Real sein jeweils sind dann andere Operationen durchzuf hren Die Typpr fung zur Laufzeit ist m glichst effizient zu realisieren da es in LISP Konstruktionen nur so wimmelt von Funktionen Beispielsweise nutzten spezielle LISP Maschinen Abschnitt A 1 S 460 dazu Zusatzbits im Speicher tagged memories und pr ften damit hardwarem ig den Typ So verf gte der LISP Rechner Symbolics 3600 ber eine Hardware die 34 Typen Symbole Listen komplexe Zahlen etc unterst tzt Das einzelne Datenwort hat zus tz lich 6 typetag Bits deren Auswertung gleichzeitig mit der eigentlichen Berechnung geschah Die klassische Listenabbildung mit cons Zellen aus zwei Zeigern lt gt Abschnitte 1 2 1 S 52 und 2 2 S 160 ist nicht effizient in Bezug auf Speicherplatz und Zugriffszeit Wenn es gilt auf viele Listenelemente 457 458 ANHANG A LISP SYSTEME zuzugreifen wenn wir also entlang der Liste traversieren dann ist die Adresse der Zelle auf die wir als n chste zuzugreifen in der Zelle ent halten die gerade im Zugriff ist Die Nachfolgeradresse kann erst an den Speicher geschickt werden wenn der vorhergehende Zugriff abge schlossen ist addressing bottleneck Zus tzlich verbraucht diese klassi sche Abbildung viel Speicherplatz da sowohl der car Zeiger wie der cdr Zeiger den gesamten Adressraum abdecken m ssen und dazu ent sprechend viele Bits ben tigen Dies ist nicht notwendig wenn eine Li ste kompakter abgeb
449. oduln auf h herer und tieferer Hierarchie Ebene mittels provide und require Konstrukten lt text gt Freier Text zur Kurzbeschreibung des Moduls lt modul functions gt Beschreibung einzelner Funktionen Mit der Import Export Unterscheidung bei der Schnittstelle entsteht daraus folgendes praxisorientierte Skelett Dabei verdeutlichen die fett 8BFN Notation Abschnitt 1 2 2 S 65 3 2 SPEZIFIKATION MIT LISP 413 gedruckten Begriffe die Angaben auf die man sich im jeweiligen Spezi fikationsschritt konzentriert module lt name gt scheme provide lt function gt require lt modul gt define effects Text zur allgemeinen Beschreibung lt modul functions gt Ausgangspunkt ist ein eindeutiger kennzeichnender Modulname Abschnitt 3 1 1 S 377 Mit der Eintragung unter effects beschrei ben wir alle zu erf llenden Leistungen und Eigenschaften des gesamten Moduls in Form eines kurzen Textes Die provide und require Angaben definieren die Modul Hier archie In der Praxis k nnen wir selten diese vom Hauptmodul ausge hende Hierarchie konsistent aufbauen Neben den top down Schritten entsteht unser Skelett bottom up middle out inside out outside in und oder hardest first Die provide und require Schnittstellen beschrei ben wir daher eher Zug um Zug mit laufenden Korrekturen W hrend im Abschnitt effects der Modul insgesamt beschrieben ist sind die einzelen z
450. ogenannte Mutatoren erforderlich Betrachten wir z B ein Konto von dem ein Geldbetrag abzubuchen ist dann wollen wir wahrscheinlich mit einem Konstrukt Abbuchen das bestehende Konto im Saldo ndern d h modifizieren und nicht ein ganz neues Kon to anlegen und alle alten Buchungen rekonstruieren und dann die neue Buchung zus tzlich vollziehen Beispiel S 42 In den folgenden Ausf hrungen dient dieser Verbund als pragmati scher Leitfaden Er ist kein Patentrezept Allheilmittel Er ersetzt kei nesfalls intensives Durchdenken einer Konstruktion Er hilft jedoch eine komplexe Aufgabe zweckm ig in weniger komplexe Teile zu gliedern 2 1 VERSTEHEN EINER KONSTRUKTION 151 2 1 3 LISP Klassiker Symbolisches Differenzieren Als Analysebeispiel betrachten wir das Differenzieren einer mathema tischen Funktion anhand des Programms Ableitungsfunktion S 153 Diese Aufgabenstellung ist ein LISP Klassiker Sie war das Mar kenzeichen beim Start der LISP Entwicklung Sie ist f r Erl uterungs zwecke weiterhin zweckm ig z B 1 p 104 135 S 13ff 187 S B 1ff 189 p 16 oder 190 deutsche Ausgabe S 276 ff Wir nut zen den Vorzug dass sie einerseits in LISP einfach rekursiv l sbar ist und andererseits keiner langen Erl uterung bedarf Schulmathematik z B 161 Das Programm Ableitungsfunktion gt Strukturskizze S 157 und Programmcode S 153 fasst die lokal definierten Konstruktoren Se
451. okale Variable Vorspann Space im Sinne eines Schalters Zu n chst ist ihr Wert t Wird das erste Zeichen ungleich space er kannt erh lt sie den Wert Ist ihr Wert und wird ein Zeichen gleich space erkannt dann ist das Ende der Zeichenteilkette erreicht Zu beachten ist dass das substring Konstrukt als lt ende gt Wert die Po sition nach unserer car string Zeichenteilkette ben tigt Wir definie ren somit folgendes car string Konstrukt eval gt define car string lambda String letrec Ende Position string length String 1 Vorspann Space t space lambda Pos char string ref String Pos space Von bis Analyse lambda Car Start Aktuelle Position cond lt Aktuelle Position Ende Position cond and Vorspann Space space Aktuelle Position Von bis Analyse Car Start 1 Aktuelle Position 1 space Aktuelle Position substring String Car Start Aktuelle Position t set Vorspann Space f Von bis Analyse Car Start Aktuelle Position 1 Aktuelle Position Ende Position 1 substring String Car Start Aktuelle Position t display Kein car string bestimmt 246 KAPITEL 2 KONSTRUKTIONEN display String Von bis Analyse 0 0 eval gt car string Alles klar gt Alles Das cdr string Konstrukt ist analog zum car string Konstrukt aufgebaut Die eigentliche Berechnung der Positionen f r das sub strin
452. ol if Bei der Alternative Abbildung 1 7 S 25 in der Art if then else end if die anhand des speziellen Symbols if er kannt wird evaluiert das LISP System zun chst das erste Argument hier lt bedingungs sexpr gt Sein Wert bestimmt die weitere Abarbeitung d h welches Argument als n chstes zu evaluieren ist Ist der Wert von lt bedingungs sexpr gt gleich true oder t d h die Bedingung gilt als erf llt True Fall dann wird lt then sexpr gt evaluiert und der gesamte if Ausdruck hat den Wert von lt then sexpr gt Ist der Wert von lt bedingungs sexpr gt gleich false oder f d h die Bedingung gilt als nicht erf llt False Fall wird die Alterna tive formuliert als drittes Argument evaluiert Im False Fall hat der gesamte if Ausdruck den Wert von lt else sexpr gt eval gt if false Ja Nein gt Nein eval gt if t Ja Nein gt Ja eval gt define Antwort t eval gt if Antwort Dank f r die Zustimmung Denken Sie mit 1 1 EINFUHRUNG HANDHABUNG VON KONSTRUKTEN 29 if lt bedingungs sexpr gt lt then sexpr gt lt else sexpr gt p lt bedingungs sexpr gt A lt then sexpr gt lt else sexpr gt Legende Grafische Darstellung nach DIN 66261 Struktogramme 138 Abbildung 1 7 Konstrukt Alternative jf then else end if gt Dank f r die Zustimmung Bei diesem R ckgabewert hat das Symbol Antwort den Wert true Hin
453. onditionalausdruck 53 Reiser Brian J 487 REPL 21 replace 353 require 320 reverse 128 Richter PH 477 495 Riesbeck Christopher K 182 318 489 Rivieres Jim des 421 493 rnrs hashtables 6 189 Robson Dave 160 491 Robustheit 446 Rodiger Karl Heinz 495 Rogers G R 374 495 Rolf Arno 489 Rombach Dieter H 403 492 Rome Erich 496 Ross Jonathan A 495 round 102 rplaca 164 rplacd 164 Rumbaugh J 418 496 Sandewall Erik 496 Sauers Ron 487 Schachter Radig Mina Jaqueline 496 Schefe Peter 492 496 scheme async channel 365 INDEX scheme date 438 scheme gui base 473 475 Schmitter E D 496 Schnupp Peter 373 496 Schoffa Georg 496 SCOOPS 466 seconds gt date 438 Seetzen J rgen 489 Seiteneffekt 33 Selektion 80 Selektor 146 semaphore post 362 363 semaphore wait 363 Semikolon 6 send 330 332 set 41 set car 164 set cdr 164 set label 475 set pen 475 Sethi Ravi 493 SETI home 351 setq 26 lt sexpr gt 6 sexpr 15 shallow access 271 Shapiro Stuart C 494 Sharkey N E 6 495 Shaw David E 496 Shaw J C 14 Shneiderman B 96 98 119 495 show 475 Siedersleben Johannes 446 489 Siefkes Dirk 489 Signatur 34 Sikl ssy Laurent 496 Simon Herbert A 14 Sklower Keith L 491 Slade Stephen 466 496 sleep 357 sleep yield 475 slide 437 SliTex 437 Slot 190 Smalltalk 448 Smith Peter 496 Software Lebenszyklus 51 So
454. onstrukt wie folgt definiert werden eval gt define Kontonummer lambda A Liste Mein assq Kontonummer A Liste eval gt define Kontotyp lambda A Liste Mein assq Kontotyp A Liste eval gt define Name des Kontoinhabers lambda A Liste Mein assq Name des Kontoinhabers A Liste Hinweis Subliste als Selektionswert Die A Listen Selektoren haben im Trefferfall die ganze Subliste als Wert und nicht nur den zum Schl ssel assoziierten Wert Vermieden wird damit die Doppeldeutigkeit im Falle null Ist ein Schl ssel mit dem Wert null verkn pft dann w re sonst der R ckgabewert bei einigen LISP Systemen gleich dem Wert kein Treffer Eine A Liste die z B keine Eintragung f r Kontotyp enth lt kann im Gegensatz zur einfachen Listenstruktur nun problemlos als Argument f r den Selektor Name des Kontoinhabers dienen eval gt define K007 Kontotyp Sachmittel Kontonummer 4711 Name des Kontoinhabers K007 gt Kontonummer K007 gt Kontonummer 4711 eval gt eval gt Zum Konstruieren und Andern einer A Liste stehen dieselben Kon strukte wie f r die einfache Liste zur Verf gung cons list set car set cdr etc Auf die A Liste ausgerichtete Konstruktoren und Muta toren sind selbst zu definieren Ein Pr dikat zum Erkennen einer A Liste kann wie folgt definiert werden eval gt define A Liste lambda Objekt letrec Leere A Liste lambda x eq
455. ontostand Wert number lt lt Fachspezifische Methoden gt gt Add Einzahlungen E Datum Betrag Add Auszahlungen E Datum Betrag Legende allgemein verf gbares Konstrukt Slot Methode privates nicht allgemein zugreifbares Konstrukt lt name gt _ Klassenkonstrukt Slot Methode Beispiel Konto S 329 Chart Konto Example Konstrukt S 424 Abbildung 3 4 UML Klassenbeispiel Konto 428 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN lt lt stereotyp gt gt je beziehungsName gt je Foo o m zusicherung merkmal m Bar e rolle rolle Legende beziehungsName Name der Assoziation zusicherung Bedingung die einzuhalten ist merkmal besonderes Kennzeichen m Multiplizit t z B x oder 0 3 rolle Sichtweise durch das gegen berliegende Objekt gt Lese Richtung f r die Beziehung hier Foo beziehungsName Bar Abbildung 3 5 UML Beziehungselement Assoziation send instanceFoo get Slot addi 6 a gt 7 Die Assoziation selbst kann einen Namen und eine Beziehungsrich tung Leserichtung haben Die Anzahl der Instanzen die in der assozi ierten Instanz vorkommen k nnen sind durch die Angabe der Multipli zit t ber der Verbindungslinie darstellbar Unterhalb der Linie kann die jeweilige Rolle der Instanzen bei der Assoziation vermerkt werden Die Multiplizit t m in Abbildung 3 5 S 428 gibt an mit wievielen Instan zen der gegen berliegende Klasse Bar eine Ins
456. onzo Church The Calculi of LAMBDA Conversion Princeton University Press New Jersey 1941 Wolfgang Coy Frieder Nake J rg Martin Pfl ger Arno Rolf J rgen Seetzen Dirk Siefkes Reinhard Stransfeld Hrsg Sichtweisen der Informatik Braun schweig 1992 Eine gesellschaftspolitisch gepr gte Analyse und Perspektive der Informatik H B Curry R Feys Combinatory Logic Vol I Studies in Logic and the Founda tions of Mathematics Amsterdam North Holland 1958 I Danicic Lisp Programming Oxford London Edinburgh u a Blackwell Scientific Publications reprinted with corrections 1984 490 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 LITERATURVERZEICHNIS J Darlington P Henderson D A Turner Eds Functional programming and its applications An advanced course Cambridge London u a Cambridge Uni versity Press auch als UMI Out of Print Books on Demand 1989 Ernst Denert Software Modularisierung in Informatik Spektrum 2 1979 S 204 218 E L De Remer H Kron Programming in the Large versus Programming in the Small in Progammiersprachen 4 Fachtagung der GI Erlangen Informatik Fachberichte 1 Springer Verlag 1976 pp 80 89 L P Deutsch Experience with Microprogrammed Interlisp System in Proc 11th Ann Microprogramming Workshop Nov 1978 pp 128 129 Edsger W Dijkstra
457. or Konstrukte im Sinne des Verbundes von Konstruktor Selektor Pr dikat und Mutator Abschnitt 2 3 1 S 216 Mit diesen Konstrukten implementieren wir einen solchen Verbund f r die Liste d h wir bilden die cons Zelle als Vektor ab Abschnitt 2 3 2 S 219 Anschlie end nutzen wir die Abbildungsopti on Vektor um eine Aktenverwaltung als einen h henbalancierten Baum abzubilden Abschnitt 2 3 3 S 222 Dieses gr ere Beispiel m ge gleichzeitig dem Training im Lesen fremder Programme dienen 2 3 1 Vektor Konstrukte In Scheme unterscheidet sich die Notation eines Vektors von der einer Liste durch ein vorrangestelltes Zeichen eval gt A BCD B Vektor mit 5 Elementen gt A B C D E eval gt A B C D E Vektor mit 3 Elementen gt A B C D E eval gt vector length A B C D E gt 2 Wie die Beispiele zeigen gilt f r Vektoren die EVAL Regel 1 lt gt Ab schnitt 1 1 2 S 21 Sie haben sich selbst als Wert Wir k nnen daher nicht wie im Fall der Liste direkt eine Funktionsapplikation no tieren Enth lt der Vektor eine Funktion und ihre Argumente und ist diese Funktion anzuwenden dann ist der Vektor vorab in eine Liste zu berf hren Dazu dient das Konstrukt vector gt list Das list gt vector Konstrukt f hrt die umgekehrte Transformation aus eval gt define Foo 1 2 3 eval gt Foo gt 1 2 3 eval gt vector gt list Foo gt 1 2 3 eval gt
458. orderung J Print Element cdr Zirkulaere Liste t Ende eval gt Print Element ARBEITSPLAN gt Uber die Investition Lagerhalle West entscheiden N chstes Element J N J Zeugnis fur den Abteilungsleiter Meier diktieren N chstes Element J N J Budgetplanung f r die Zentralabteilung aufstellen N chstes Element J N J ber die Investition Lagerhalle West entscheiden N chstes Element J N N Ende Mit Hilfe der Mutatoren set set car und set cdr ist die Verwaltung der Arbeitsvorg nge auf der Grundlage des Konzepts der zirkul ren Liste im Programm lt gt Programmcode S 170 abgebildet Dieses Programm hat folgende Struktur eval gt define Verwalten von Arbeitsvorgaengen lambda Z Liste letrec Anforderung read Hauptfunktion Vorgangsverwaltung lambda Zirkulaere Liste 2 2 ABBILDUNGSOPTION LISTE 169 Steuerungscodeabfrage let Antwort Anforderung cond Nachster Vorgang eq Antwort Ja Neuer Vorgang eq Antwort Neu L sche Vorgang eq Antwort OK Programm beenden eq Antwort Stop Vorgang anzeigen t Aufruf der lokalen end rekursiven Hauptfunktion Vorgangsverwaltung Z Liste Zum Verstehen der Aufgabe sind vorab Anforderungen und Testfalle formuliert Dabei verweist die Abktirzung A auf eine Anforderung und die Abktirzung T auf einen Testfall Al Verwalten von Arbeitsv
459. orgaengen speichert Vorgange in einer zirkularen Liste A1 1 Die Vorg nge k nnen in der gespeicherten Reihenfolge nach einander angezeigt werden A1 2 Der angezeigte Vorgang ist aus der Liste entfernbar A2 Ein neuer Vorgang ist in die Liste einf gbar A2 1 Vor dem gezeigten Vorgang oder A2 2 hinter dem gezeigten Vorgang T1 Beispiel T1 1 Arbeitsplan eval gt define ARBEITSPLAN list ber die Investition Lagerhalle West entscheiden Zeugnis fuer den Abteilungsleiter Meier diktieren Budgetplanung fuer die Zentralabteilung aufstellen T1 2 Applikation eval gt Verwalten von Arbeitsvorgaengen ARBEITSPLAN gt Gef hrte Benutzereingaben 170 KAPITEL 2 KONSTRUKTIONEN Programm Verwalten von Arbeitsvorgaengen Scheme R6RS mit Mutable Pairs eval gt require rnrs base 6 eval gt require rnrs mutable pairs 6 eval gt define Verwalten von Arbeitsvorgaengen lambda Z Liste letrec Anforderung lambda begin display N chster Vorgang Ja newline display Neuen Vorgang einf gen Neu newline display Vorgang fertig bearbeiten OK newline display Ende Stop newline display Zeige Vorgang sonst newline read Hauptfunktion Vorgangsverwaltung lambda Zirkulaere Liste let Antwort Anforderung Steuerungs codeabfrage cond Zum n chsten Vorgang eq Antwort Ja Vorgangsverwaltung cdr Zirkulaere Liste
460. ormulierung notiert 1 3 REKURSION ALS PROBLEMLOSUNGSMETHODE 113 Charakteristische Beispiele fur Abschnitt 1 2 eval gt cond 1 2 3 4 5 6 gt 3 eval gt caddr lambda x y y x gt y X eval gt cons 23 45 67 89 gt 23 45 67 89 eval gt eq cons Meyer AG Mueller OHG Meyer AG Mueller OHG gt TL eval gt equal cons Meyer AG Mueller OHG Meyer AG Mueller OHG gt JE eval gt define 1 7 eval gt 1 12 gt 19 eval gt define 3 lambda wert let dreifach lambda x 3 x dreifach wert eval gt 3 5 gt 15 eval gt let x 2 y x 1 x y gt 6 eval gt and not and not 3 gt Ft eval gt case M Mein Dein Sein t else Nicht dabei gt Nicht dabei eval gt do i 2 i 1 begin print Ja newline 0 41 gt Ja Ja Ja eval gt map list A B C D gt A B C D eval gt for each print Gestern Heute Morgen gt Gestern Heute Morgen 1 3 Rekursion als Problemlosungsmethode Nimmt eine Definition auf sich selbst Bezug dann liegt direkte Rekur sion vor Ist der Selbstbezug tiber eine Aufruffolge von Definitionen ge geben dann spricht man von indirekter oder gegenseitiger Rekursion 114 KAPITEL 1 KONSTRUKTE eval gt define Laenge lambda Liste cond null Liste 0 t 1 Laenge cdr Liste
461. ort Foo Vorab require scheme gui base define frame new frame label Hello World width 300 height 300 define msg A 3 PLT SCHEME UBERSICHT 475 new message parent frame label LISP macht Freu n de new button parent frame label Bitte klicken callback lambda button event send msg set label Button geklickt gt 8trictiobjectrbutton ss send frame show t Grafik Vorab require scheme gui base define Frame new frame label Ein rotes Rechteck width 400 height 300 define Canvas new canvas parent Frame define Device Context send Canvas get dc define Red Pen make object pen RED 10 solid define Figure lambda dc send dc set pen Red Pen send dc draw rectangle 5 120 380 60 send Frame show t sleep yield 1 Figure Device Context Turtle Grafik In LISP ist wie auch urspr nglich in LOGO die Turtle Grafik Zeichen stift f r gerade Linien genannt nach einem Roboter der hnlich einer Schildkr te aussah verf gbar Kern der Turtel Grafik sind die drei Be fehle move draw und turn In PLT Scheme gibt es zwei Turtle Grafik arten 1 Traditionelle imperativ gepr gte Turtle Operationen die in einem festen Fenster stattfinden require graphics turtles 2 Funktionale Turtle Operationen die ein Turtle Bild als Argument und als Funktionswert haben require graphics value turtles 3Mathematiker und Psychologe Se
462. ostand number fontN 30 0 0 text lt lt Mutatoren gt gt fontI 30 0 0 text set Name Inhaber Name string fontN 30 0 0 text set Adresse Inhaber Adresse string fontN 30 0 0 text set Einzahlungen Wert list tontN 30 0 0 text set Auszahlungen Wert list fontN 30 0 0 text set Kontostand Wert number fontN 30 0 0 text lt lt Fachspezifische Methoden gt gt fontI 30 0 0 text Add Einzahlungen E Datum Betrag fontN 30 0 0 text Add Auszahlungen E Datum Betrag fontN 30 0 0 425 426 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN eval gt Chart Konto Example gt Abbilung 3 4 S 427 3 3 2 Assoziation und Vererbung Das UML Klassendiagramm dokumeniert die Beziehungen zwischen ein zelnen Klassen Bedeutsam sind die Beziehungen Assoziation und Verer bung Im Folgenden werden beide erl utert und ihre grafische Darstel lung programmiert Assoziation Eine Assoziation wird in UML als eine gerichtete Verbindungslinie zwi schen Klassen dargestellt Abbildung 3 5 S 428 Die Beziehung zwi schen einer Instanz der einen Klasse mit einer Instanz der anderen Klasse wird Objektverbindung englisch link genannt Links lassen sich daher als Instanzen einer Assoziation auffassen Exemplarisch f r eine Assoziation betrachten wir die Beziehung zwi schen der Klasse Foo die ein Feld slot ber die Zugriffsmethoden get Slot und und set Sl
463. ot bereitstellt und der Klasse Bar die die Methode addi definiert Speichern wir nun in einer erzeugten In stanz instanceFoo der Klasse Foo im Feld slot eine anonyme Instanz der Klasse Bar dann besteht eine Assoziation zwischen den Klassen Im UML Klassendiagramm wird die Assoziation durch eine Li nie zwischen den beiden Klassen dargestellt eval gt define Foo class object super new define slot OK define public get Slot lambda slot define public set Slot lambda Slot set slot Slot eval gt define Bar class object super new define public add lambda n n 1 eval gt define instanceFoo new Foo eval gt send instanceFoo set Slot new Bar send instanceFoo get Slot gt struct object Bar send eval gt eval gt 3 3 NOTATION MIT UML 427 lt lt fachklasse gt gt HECB KONCOS fpublic version 1 0 Identifizierung number id Name Inhaber string name Adresse Inhaber string Einzahlungen list Auszahlungen list Kontostand number 0 lt lt Selektoren gt gt get Identifizierung number get Name Inhaber string get Adresse Inhaber string get Einzahlungen list get Auszahlungen list get Kontostand number lt lt Mutatoren gt gt set Name Inhaber Name string set Adresse Inhaber Adresse string set Einzahlungen Wert list set Auszahlungen Wert list set K
464. pandierungsvorschrift ausgewertet und anschlie end das entstandene Resultat evaluiert eval gt define syntax rule Mycons x lambda Sexpr cons x Sexpr 1 x Sexpr 0 eval gt define Foo Mycons list ref Beispiel Makroexpansion Mycons Der Makro Mycons expandiert f r dieses Foo Konstrukt wie folgt define Foo lambda Sexpr quasiquote cons unquote list ref Sexpr 1 unquote list ref Sexpr 0 Mit dieser Makroexpansion auch als Makrotransformation bezeichnet lasst sich das Ergebnis des Evaluierens von Foo leichter nachvollziehen eval gt Foo ab oc gt cons ba Der Makro Mycons wird nochmals wie folgt genutzt eval gt define Bar Mycons Seine Makrotransformation ergibt mit der Kurzschreibweise define Bar lambda Sexpr cons Sexpr 1 Sexpr 0 Damit ergibt sich z B eval gt Bar 6 gt cons 7 6 eval gt define Baz lambda Anfang Rest Mycons list ref list Anfang Rest eval gt Baz Heute Arbeiten gt cons Arbeiten Heute 2 5 ABBILDUNGSOPTION FUNKTION MIT UMGEBUNG 297 Die Makro Option ist einerseits ein m chtiges Konstruktionsmittel andererseits in der Praxis eine h ufige Fehlerquelle Sorgf ltig zu beach ten sind der Zeitpunkt und die Umgebung des Textersatzes Makros sind stets vor ihrer ersten Nennung in einer Funktion zu definieren wie das folgende Beispiel zeigt eval gt define Foo lambda x 2 amp
465. per new field field field field Raum Rm1 Regal R11 Fach Fhi 2 8 KLASSE INSTANZ MODELL 349 Kurzzeichen Magazin Verwalter mye eval gt define Stueckgut mixin mixin X super new field Lager Dimension klein field Bestandswert 0 define Kosten Stueck 0 define public get Kosten Stueck lambda Kosten Stueck define public set Kosten Stueck lambda Wert set Kosten Stueck Wert eval gt define Eisenware mixin mixin super new field Rost Freiheit f eval gt define Farbe mixin mixin super new field Verfalls Datum 20100101 eval gt define Fluessigkeit mixin mixin super new field Behaelter Klasse I field Zuendtemperatur 0 eval gt define Magazin Verwalter mixin mixin super new define Name field Befugnis Klasse Alles field Kurzzeichen define public get Name lambda Name define public set Name lambda Text set Name Text define Verwalten mixin mixin super new define public einlagern eval gt lambda let Zugang begin display Zugangsmenge read Zeitpunkt begin display 350 KAPITEL 2 KONSTRUKTIONEN Datum JJJJMMTT read Kosten begin display Kosten pro Stueck read send this set Bestand send this get Bestand Zugang send this
466. provide Konstrukt bereitzustellen Die Konstrukte Get Konto und Add Konto von Konten Datenbank sind durchzurei chen also auch im provide Konstrukt zu nennen eval gt module Konten Management scheme provide make Konto Konto Konto Identifizierung Konto Name Inhaber Konto Adresse Inhaber Konto Kontostand set Konto Kontostand Get Konto 2 7 MODULE LOKALER NAMENSRAUM 323 Add Konto require Konten Datenbank define struct Konto Identifizierung Name Inhaber Adresse Inhaber Einzahlungen auto Auszahlungen auto Kontostand auto transparent mutable auto value 0 Auf die top level Ebene importiern wir den Modul Konten Mana gement mit dem require Konstrukt und erzeugen dann drei Konten eval gt require Konten Management eval gt define K1 make Konto 1 Leuphana Universitat L neburg eval gt define K2 make Konto 2 Siemens AG M nchen eval gt Add Konto K1 eval gt Add Konto K2 eval gt Konto Name Inhaber Get Konto K1 gt Leuphana Universit t eval gt define K3 make Konto 3 Software AG Darmstadt eval gt Get Konto K3 gt f Die Konten gebunden an das Symbol KONTEN sind auf der top level Ebene nicht direkt verf gbar weil sie in einem anderen Namens raum gebunden sind Uber die Konstrukte Add Konto und Get Kon to k nnen wir aber darauf zugreifen eval gt KONTEN gt ERROR reference to an identifier
467. quote Teil 1 Beispiel zum begin0 Konstrukt Definiert ist ein Konstrukt zum Stapeln von Werten Objekten nach dem Prinzip Last In First Out kurz LIFO Prinzip oder auch Stack Prinzip genannt Die Zugriffsfunktion pop gibt das oberste Stack Element w hrend die Funktion push das Objekt kellert d h in den Stack ein speichert eval gt define STACK Mueller OHG Schulze GmbH eval gt define push lambda object set STACK 1 2 KOMBINIEREN VON KONSTRUKTEN 19 7 7Sequenz Beispiel mit explizit zu notierendem begin Konstrukt eval gt define Kunden Anzahl 0 eval gt define Lieferanten Anzahl 0 eval gt define Schulze GmbH Lieferant Daten zur Schulze GmbH eval gt define Kunde lambda x eq car x Kunde eval gt define Lieferant lambda x eq car x Lieferant Fall 1 Eine Selektion mit Sequenzen die ein explizites begin Konstrukt erfordern eval gt define Z hlung lambda operand if Kunde operand begin set Kunden Anzahl 1 Kunden Anzahl print Bearbeite Kunde if Lieferant operand begin set Lieferanten Anzahl 1 Lieferanten Anzahl print Bearbeite Lieferant print Weder Kunde noch Lieferant Fall 2 Nutzung der impliziten Sequenz im cond eval gt define Z hlung lambda operand cond Kunde operand set Kunden Anzahl 1 Kunden Anzahl print Bearbeite Kunde Li
468. r AG gt 1000000 Anfangswert eval gt set Meyer AG Abbuchen Meyer AG 300000 00 eval gt Meyer AG gt 700000 Kontostand nach 1 Abbuchung eval gt set Meyer AG Abbuchen Meyer AG 800000 00 eval gt Meyer AG gt 100000 Kontostand nach 2 Abbuchung Diese Schreibweise ist recht umst ndlich Wir erg nzen daher die Funktion zum Abbuchen direkt um die Zustands nderung des Kontos d h um den Nebeneffekt Das Konstrukt Abbuchen nennen wir deshalb jetzt Abbuchen am Ende mit einem Ausrufezeichen versehen Um eine Funktion Abbuchen verstehen zu k nnen erl utern wir vorab einige Aspekte von eval und apply bezogen auf die jeweilige Umgebung Im Abschnitt 2 5 S 270 befassen wir uns eingehend mit der Funktion und ihrer Umgebung Umgebung Namensraum Wenn ein Symbol mit dem define Konstrukt kreiert und an einen Wert gebunden wird dann muss das LISP System das Symbol und den Wert speichern Die Assoziation des Symbols zum Wert wird in einem Na mensraum engl namespace salopp formuliert in der Umgebung engl environment aufgebaut die zum Zeitpunkt des evaluierens des define Konstruktes aktuell ist Eine Umgebung ist konzeptionell als eine Liste vorstellbar deren Elemente wieder Listen sind Eine solche Liste ist eine sogenannte Assoziationsliste lt symbol gt lt wert gt lt symbol gt lt wert gt Das Evaluieren eines 1 ambda Konstruktes f hrt zum Aufbau einer neu en Umge
469. r Kon textintegration Zu vermeiden ist eine Kontextabh ngigkeit die sich nicht aus der Zweckausrichtung ableitet F r ein Pflichtenheft sind daher z B die Aussagen nicht in der Zukunftsform zu notieren sondern im Pr sens Weil es zun chst um etwas Zuk nftiges geht w hlt der Autor spontan die Zukunftsform Das Programm Rechnung wird die Mehrwertsteu er berechnen Erst die Notation im Pr sens bringt die Herausl sung aus dem Kontext zuk nftige Eigenschaft Das Programm Rechnung berechnet die Mehrwertsteuer Fur gro e Konstruktionen lt gt Tabelle 3 10 S 406 sind Dokumenta tionsregeln verbindlich vorzuschreiben Im Bereich der ffentlichen Ver waltung sind es z B die KoopA ADV Rahmenrichtlinien N heres dazu lt gt z B 22 Solche Richtlinien bestimmen welchen Inhalt die einzel nen Dokumente des Konstruktionsprozesses haben sollen Sie erm g lichen erst eine effiziente Kooperationen bei einer gr eren Anzahl von Beteiligten und Betroffenen Allerdings motiviert eine Richtlinie zum Schreiben bei dem ein schnelles Abhaken einer l stigen Vorgabe in den Mittelpunkt r ckt Die angestrebte Vollst ndigkeit wird in der Praxis mit mehr oder weniger aussageleeren Phrasen erf llt Die pragmatische Empfehlung lautet daher Sei kein Formalist der Richtlinien abhakt son dern schreibe adressaten und zweck ausgerichtet Im folgenden wird die Transparenz des Quellcodetextes behandelt Dazu er rtern wir die d
470. r Konzeptionen Ausgehend von einer Problemanalyse wer den mit der Aufnahme der Ziele und Konflikte sowie der Ist Situation des bisherigen System umfelde s der Bedarf und die Schwachstellen pr zisiert Alternative L sungans tze sind dann anhand der pr zisierten Ziele und Konflikte zu bewerten Abbildung 3 1 S 404 Anschlie end folgt das Spezifizieren im engeren Sinne d h das Entwerfen und Formulieren von Quellcodetexten Konzentriert man sich auf die Phase in der anwendungsspezifische Datentypen zu pr zisieren sind dann be steht die Spezifikation aus Sorten Operationen und Gleichungen Diese Spezifikation notiert die Datentypen im Sinne von Algebren N heres zur algebraischen Spezifikation z B 111 Wir gehen von einer 404 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Dokumentation Anzahl Seiten Dg Bewertung Auswahl Ds L sungsalternativen Ds Bedarf amp Schwachstellen Ds IST Aufnahme des System umfelde s D2 Ziele amp Konflikte Dy Problemanalyse T T T T gt Zeit PL PR P P Ps Pz Mannjahre Legende D Dokument als Ergebnis der Phase P Abbildung 3 1 Spezifizieren in den ersten Phasen gew hlten L sungsalternative aus lt gt Abbildung 3 1 S 404 nach Phase Ps und spezifizieren schrittweise die Aufgabenstellung so weit bis die se ohne Missverst ndnisse direkt konstruierbar definierbar ist Diese Spezifikation pr zisiert Was leistet die Konstruktion im Einzelnen Die
471. r Schnittstelle der Additionsfunktion zum Fehler zu 3 Nebeneffekt Wenn symbolische Ausdr cke evaluiert werden k n nen sie nicht nur ihren Wert zur ckgeben sondern zus tzlich den Wert symbolischer Ausdr cke ver ndern Sie verursachen einen Nebeneffekt auch Seiteneffekt genannt Bisher haben wir als einen solchen symbolischen Ausdruck das define Konstrukt vorgestellt d h die Liste mit dem speziellen Symbol define als erstem Ele ment Die Nebeneffekte eines Konstruktes m ssen bekannt sein um ihre Wertver nderungen einkalkulieren zu k nnen Beispiel f r einen Nebeneffekt 34 KAPITEL 1 KONSTRUKTE EINGABE Argument e Schnittstelle formale Parameter KONSTRUKT Implementation K rper AUSGABE Wert e Nebeneffekt e Abbildung 1 11 LISP Konstrukt eval gt define Schulze GmbH 3 45 eval gt define Meyer AG lambda set Schulze GmbH 123 45 1000 00 eval gt Meyer AG 1000 0 eval gt Schulze GmbH 123 45 Durch Anwendung der selbst definierten Funktion Meyer AG wurde der Wert von Schulze GmbH modifiziert Exkurs Signatur Zur Spezifikation mit Hilfe von elementaren Funktionen Operationen nebeneffektfreien Konstrukten fassen wir die Informationen 1 Name der Funktion 2 Typ der Argumente domain der Funktion und 3 R ckgabewert range der Funktion unter dem Begriff Signatur zusammen Solange es um Konstrukte geht die das jeweilige LISP System als eingebaut
472. r Teil verkn pft Diese Verkn pfung ist abbildbar indem wir die beiden Teile als Werte im Namensraum Umgebung einer Funktion speichern Dazu bedienen wir uns des Konstruktes define syntax rule das wir bei der The matik Makros n her behandeln gt Abschnitt 2 5 3 S 293 2 5 ABBILDUNGSOPTION FUNKTION MIT UMGEBUNG 273 F Cons eval gt define F NULL lambda F NU11 eval gt define syntax rule f x y lambda let ns make base namespace eval define x F NULL ns eval define y F NULL ns ns F cons als Funktion deren Applikation ein Namensraum ist eval gt define F cons Anstelle von x und y wird car Teil und cdr Teil gesetzt car Teil cdr Teil Die Expansion Ergebnis des obigen define syntax rule Konstruk tes ist eval gt define F cons lambda let ns make base namespace eval define car Teil F NULL ns eval define cdr Teil F NULL ns ns Damit wird deutlich dass car Teil und cdr Teil nur im Namens raum ns gebunden sind eval gt F cons gt lt namespace 0 gt eval gt eval car Teil F cons gt F NULL eval gt eval car Teil gt ERROR eval gt define F set cdr lambda let ns F cons eval set cdr Teil lambda x x ns ns eval gt eval cdr Teil F set cdr gt lambda x x eval gt eval car Teil F set cdr gt F NULL eval gt
473. r Zirkulaere Liste set car Zirkulaere Liste list set Zirkulaere Liste cdr Zirkulaere Liste Vorgangsverwaltung Zirkulaere Liste 172 KAPITEL 2 KONSTRUKTIONEN A Namenlos DrScheme AEE Datei Bearbeiten Anzeigen Sprache Scheme Einf gen Hilfe Namenlos define Speichern a Macro Stepper Debugger Syntaxpr fung A start AP Stop lang scheme require rnrs base 6 require rnrs mutable pairs 6 define Verwalten von Arbeitsvorgaengen lambda Z_Liste letrec Anforderung lambda We Willkommen bei DrScheme Version 4 2 3 3m Sprache Module memory limit 512 megabytes gt ARBEITSPLAN 0 ber die Investition Lagerhalle West entscheiden Zeugnis f r den Abteilungsleiter Meier diktieren Budgetplanung f r die Zentralabteilung aufstellen O gt Verwalten von Arbeitsvorgaengen ARBEITSPLAN N chster Vorgang Ja Neuen Vorgang einf gen Neu Vorgang fertig bearbeiten OK Ende Stop Zeige Vorgang sonst sonst Bearbeiten Sie ber die Investition Lagerhalle West entscheiden N chster Vorgang Ja Neuen Vorgang einf gen Neu Vorgang fertig bearbeiten OK Ende Stop Zeige Vorgang sonst Legende Dr Scheme http www plt scheme org Zugriff 24 Oct 2009 Quellcode S 170 Abbildung 2 5 Applikation Verwalten von Arbeitsvorgaen gen Programm beenden eq Antwort Stop display Vorgangsverwaltung beendet
474. r diese Struktur Beim Abarbeiten des Baumes wird eine Systemantwort erkannt wenn der Baum nur noch aus einem Element besteht d h length lt baum gt ist gleich 1 Hinweis length ist eine eingebaute LISP Funktion Sie entspricht dem Konstrukt Laenge lt gt Tabelle 1 19 S 114 Das Durchlaufen dieses Bin rbaums steuert die rekursive Funktion Navigation Nach der rekursiven Pro bleml sungsmethode konstruieren wir die L sung auf der Basis trivialer F lle Hier ist der triviale Fall gegeben wenn der Bin rbaum so weit ab gearbeitet ist dass ein Baumblatt erreicht ist d h eine Systemantwort auszugeben ist Wir definieren daher ein Pr dikat das feststellt ob ein Baumblatt gegeben ist 1 3 REKURSION ALS PROBLEMLOSUNGSMETHODE 125 eval gt define Baumblatt lambda Baum eg 1 length baum Abhangig von der Dialogantwort ist entweder im lt ja baum gt oder im lt nein baum gt das Navigieren fortzusetzen Ware der lt j a baum gt weiter zu verfolgen dann ist ein Selektor erforderlich der aus dem urspr nglichen Baum den lt ja baum gt ermittelt Bezogen auf die Li ste die den Baum abbildet ist das zweite Element zu selektieren F r den lt nein baum gt ist ein analoger Selektor erforderlich Wir definie ren eine Funktion Verzweigung die abh ngig von der Dialogantwort die entsprechende Selektorfunktion ermittelt Der Wert der Funktion Verzweigung ist selbst eine Funktion n mlich die jeweilige Selektor
475. r zum Aufbau einer Pr sentation von Folien Slides Anders als bei dem in der Regel verwendeten Microsoft Powerpoint das prim r auf dem WYSIWYG Konzept basiert generieren wir die einzelnen Bil der und deren Pr sentationsfolge durch ein PLT Scheme Programm Eine Slideshow basiert auf einer Sequenz von slide Konstrukten die Texte Bilder und zu evaluierenden LISP Konstrukte enthalten k n nen Das Pr sentieren mit Vor und R ckw rtsbl ttern erfolgt ber Ta sten Kommandos Die Tabelle 3 11 S 437 zeigt die Kommandos die zum Navigieren bei der Slideshow zur Verf gung stehen Einzelne Ausgaben in einem Slide die erst nach einem Klick darge stellt werden sollen werden mit einem vorangestellten next Konstrukt markiert 21WYSIWYG What You See Is What You Get 22 Analog zu SliTex das auf TEX Code basiert http tug ctan org Zugriff 18 Jan 2009 438 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Ein charakteristisches Merkmal ist die Option innerhalb des slide Konstruktes LISP Code ausf hren zu k nnen Das folgende spa ige Kurz beispiel Lotto zeigt Ihre Gl ckzahlen indem es jeweils das ramdom Konstrukt evaluiert Modul Lotto module Lotto scheme require slideshow define Zahl lambda number gt string random 48 1 slide item Ihre Lotto Gl ckszahlen item Zahl Zahl Zahl Zahl Zahl Zahl eval gt require Lotto gt Ein Slide mit Text und 6 Zahlen 3 4 1 P
476. rScheme Das Konstrukt list copy steht in PLT Scheme DrScheme zur Verf gung wenn die Defintionen von list ss geladen und compiliert wurden Bei der Standardinstallation von PLT Scheme DrScheme steht list ss un ter C Programme plt collects srfi 1 list ss anders formuliert eval gt require srfi 1 list Achtung Passt aber nicht mit der Spracheinstellung R5RS zusammen daher wenn auch set car und oder set cdr mit eval gt require rnrs base 6 eval gt require rnrs mutable pairs 6 irur das l287 C0pY eval gt require srfi 1 list eval gt define Foo A BC D eval gt define Baz list copy Foo eval gt eq Foo Baz gt f Foo und Baz zeigen auf verschiedene cons Zellen eval gt equal Foo Baz gt t 182 KAPITEL 2 KONSTRUKTIONEN eval gt set Foo Alles klar eval gt Foo gt Alles klar eval gt Baz gt A BC D eval gt set Baz OK eval gt Foo gt Alles klar eval Baz gt OK Fall 3 Zirkulare Liste Notwendige Bibliotheken in PLT Scheme f r die zirkul re Liste eval gt require rnrs base 6 eval gt require rnrs mutable pairs 6 7 7Fur das list copy eval gt require srfi 1 list eval gt define Foo a b c d eval gt set cdr cddr Foo Foo eval gt Foo gt 0 a b c d 4 HOH eval gt define Baz Foo eval gt set car cadr Baz e eval gt Baz gt 0 a e c d 0 eval gt car cddddr Ba
477. ragment der Tabelle 1 11 S 70 werden die Werte von Teil 1 Teil 2 und Teil 3 zum Zeitpunkt ihrer Definition ermit telt St nde an der Stelle von lt sexpr gt f r Modul Teil 3 z B der symbolische Ausdruck sin 0 2 0 3 dann wird dieses Sinus berechnungsprogramm beim Evaluieren des define Konstruktes aus gef hrt wobei Teil 3 an den R ckgabewert des sin Konstruktes ge bunden wird hier 0 479425538604203 Die Anwendung von Gesamt f hrt nur zum Ermitteln der Bindung von Teil 3 Dieser wahrschein lich ungewollte Effekt ist vermeidbar indem wir an den Modul einen gequoteten symbolischen Ausdruck eine Konstante binden z B f r Teil 3 eval gt define Teil 3 sin 0 2 0 3 Verfahren wir f r Teil 1 und Teil 2 entsprechend dann ist die Se quenz Gesamt wie folgt zu definieren eval gt define Gesamt lambda eval Teil 1 eval Teil 2 eval Teil 3 Statt das quot e Konstrukt einzusetzen k nnen wir die Moduln Teil 1 Teil 2 und Teil 3 auch als Lambda Konstrukte definieren so dass erst die Applikation von Gesamt die Auswertung der Moduln bewirken soll Im Programmfragment in Tabelle 1 12 S 71 werden die Moduln Teil 1 Teil 2 und Teil 3 nur abgearbeitet Ihnen werden vom Haupt 72 KAPITEL 1 KONSTRUKTE Modul Gesamt keine Werte bergeben Um Werte ber eine Schnittstel le von Gesamt ftir die sequentielle Abarbeitung der Moduln Teil 1 Teil 2 und Teil 3 bereitzustellen definieren wir
478. rbunden ist wird als Pseudoentfernung ein gro er Wert angenommen vgl E3 cond cadr assoc Anderer Knoten getprop Knoten Nachfolger t 9 9e99 Knoten in Liste eroeffnete Knoten sind in der Reihenfolge ihrer Prioritaet sortiert Zugaenge sind daher entsprechend ihres 208 KAPITEL 2 KONSTRUKTIONEN Schaetzwertes einzufuegen Get beste Knoten lambda Liste car Liste Einfuegen nach Entfernungsschaetzung lambda Knoten Liste letrec Neue Wert Entfernungsschaetzung Start gt Ziel Knoten Einfuegen lambda K L condi null L list K lt Neue Wert getprop car L Schaetzung Gesamtentfernung cons K L ft Coons car L Einfuegen K cdr L Einfuegen Knoten Liste Offene Knoten schreibt die Eigenschaftsliste f r die neuen Knoten der bereinigten Arbeitsliste fort und sortiert diese in Liste eroeffnete Knoten ein Offene Knoten lambda Knoten putprop Knoten Entfernung vom Start Entfernung Start Knoten gt Anderer Knoten Analyse Knoten Knoten putprop Knoten Schaetzung Gesamtentfernung Entfernungsschaetzung Start gt Ziel Knoten putprop Knoten Weg Analyse Knoten set Liste eroeffnete Knoten Einfuegen nach Entfernungsschaetzung Knoten Liste eroeffnete Knoten Neuberechnen offene Knoten ist erforderlich f r die Knoten die auf einem anderen Weg schon erreicht wurden d h sich in L
479. rden Benennt z B das erste Element eine Funktion dann sind die restli chen Elemente Argumente die vor der Ubernahme in den Funktions k rper evaluiert werden Abweichend von der blichen Notation f x y verschiebt LISP die Funktion f in die Klammer und verwendet als Trenn zeichen das Leerzeichen statt dem Komma also x y Die Funktionsapplikation kann durch das apply Konstrukt explizit angegeben werden Ist das erste Element ein spezielles Symbol z B define oder if dann h ngt es vom jeweiligen Symbol ab ob Argumente evaluiert wer den oder nicht Das spezielle Symbol quote blockiert die Auswertung Das Symbol eval f hrt zur Anwendung der EVAL Regeln Das eval Konstrukt dient als Gegenst ck zum quote Konstrukt Der Wahrheitswert nicht wahr wird repr sentiert durch oder false Alle Werte ungleich nicht wahr werden als Wahrheitswert wahr t oder true aufgefasst 1 1 EINFUHRUNG HANDHABUNG VON KONSTRUKTEN 49 Ein Konstrukt ist ein symbolischer Ausdruck gekennzeichnet durch Schnittstelle Riickgabe Wert e und gegebenenfalls durch Nebenef fekt e Das lambda Konstrukt dient zur Definition von eigenen Kon strukten Die lambda Variablen bilden die Schnittstelle die Rechenvor schrift setzt sich aus eigenen und oder eingebauten Konstrukten zusam men Der Wert eines Symbols ist von der Umgebung abhangig in der das Symbol evaluiert wird Jedes 1ambda Konstrukt baut eine eigene Um gebung auf Es
480. rec Web Input Port get pure port string gt url Web MyFile open output file File H Yexists replace Transfer lambda let content read byte Web Input Port cond eof object content close input port Web Input Port close output port MyFile content t write byte content MyFile Transfer Transfer Mit dem Download Konstrukt das auf der Basis von read byte und write byte arbeitet transferieren wir z B den pd File waf feall pdf 1 MByte Die dazu insgesamt ben tigte Transferzeit messen wir mit dem time Konstrukt Es gibt die Anzahl der Millise kunden an die die CPU ben tigt hat die insgesamt zur Erzeugung des Resultates ben tigt wurden sowie die darin enthaltene Zeit f r Garbage Collection gc 2 eval gt require HEGB Transfer eval gt time Download http www hegb de waffe waffeall pd f D bonin temp waffeall pdf 24 Das Portable Document Format ist ein plattformunabhangiges Dateiformat fiir Doku mente das vom Unternehmen Adobe Systems entwickelt und 1993 ver ffentlicht wurde http www adobe com devnet pdf pdf_reference html Zugriff 15 Jan 2010 25Bei meiner Konfiguration Notebook lenovo Think Pad W500 wurden f r den Transfer von MByte im Durchschnitt lt 1 5sec ben tigt 26Dje Korrektheit der Zahlen h ngt von der Plattform ab Bei Multithreading kann die Zeitmessung Arbeit von anderen Threads enthalten 2 9 KOMMUNIKATI
481. ref 189 hashtable set 189 hashtable size 189 Haugg Friedrich Haugg 492 hb append 420 hc append 420 Hearn Anthony C 491 492 494 Henderson Peter 270 490 492 Hennessey Wade L 492 Henson Martin C 270 492 Herrmann Stephan 446 493 Herzog O 373 487 Hesse Wolfgang 403 492 higher order function 101 271 Hilbert David 96 Hildebrand D 390 408 487 488 hline 420 Hoare C A R 492 Hoene T 390 488 Hofstadter Douglas R 114 492 Holtz Frederick 492 HOPE 270 Horn Berthold Klaus Paul 239 390 498 Horowitz Ellis 492 ht append 420 Huet G 270 491 Hughes Sheila 492 Hu mann Michael 492 IBUKI Common LISP 464 init 329 Instrument 406 integer gt char 294 Integritat referenzielle 428 interface 340 InterLISP D 464 Internmachen 259 503 IPL 14 IQ CLISP 464 IQ LISP 464 is a 341 473 ISO IEC 19501 419 Iteration 89 Ito Takayasu 492 Jackson M A 70 80 81 89 90 492 Jacobson Ivar 418 493 Jahnichen Stefan 446 493 Java 29 Jones Simon L Peyton 493 Jonsson P 418 493 JPEG 430 JPG 430 Julia Gaston 476 Kaelbling Michael J 390 493 Kahn Kenneth 327 488 Keene Sonya E 337 493 Keller Robert M 493 Kerninghan B W 393 493 Kessler Robert R 328 493 Keutgen Hans 403 492 Kiczales Gregor 327 421 488 493 Kim Won 418 493 Klaus Georg 28 493 Koch Helge von 476 Kolb Dieter
482. rei Dokumentationsprobleme 1 Benennung von Konstrukten 2 Kommentierung und 3 Vor und R ckw rtsverweise Diese Punkte sind von praktischer Bedeutung wenn eine vorgege bene Spezifikation umzusetzen ist Empfehlungen zur Erarbeitung ei ner solchen Spezifikation behandeln wir anschlie end Abschnitt 3 2 S 403 3 1 1 Benennung Der Name eines Konstruktes sei nicht irgendein Symbol sondern be nennt diejenige Eigenschaft die es von allen anderen unterscheidet Of fensichtlich ist der Name bedeutsam f r die Transparenz der gesamten 378 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Dokumentation incl Quellcodetexte Mit der Namensvergabe fiir Ob jekte Funktionen Makros Variablen Konstanten etc sind zumindest zwei Aspekte verkn pft 1 mnemotechnischer Aspekt Ziel ist eine leicht einpr gsame Benennung im Sinne eines Verwei ses auf das Gemeinte Objekt in der realen Welt Es geht um eine Korrelation zwischen der Bezeichnung des realen Objektes und der Bezeichnung des formalen Objektes Abschnitt 1 2 1 S 52 2 konstruktionsbedingter Aspekt Ziel sind Aussagen zu konstruktionsspezifischen Aufgaben und Ei genschaften Abschnitt 2 1 S 141 z B Informationen zur Be antwortung der Fragen e Ist es ein eingebautes Konstrukt e Ist es ein risikoreiches Konstrukt BAUSTEIN BACKSTEIN BLOCK KLOTZE ODER KONSTRUKTIONSELEMENT WAS IST EIN NAME
483. reibung zugeordnet werden Die erfassten Akten k nnen in einer anzugebenden Datei abgelegt und von dieser wieder eingelesen werden Da unterstellbar ist dass in dieser Aktenverwaltung h ufig gesucht und neue Akten eingef gt werden speichern wir die Akten als h hen balancierten Baum engl balanced tree F r einen bin ren Baum gilt folgende Definition der Ausgeglichenheit Defintion Ausgeglichenheit Ein Baum ist genau dann ausgegli chen wenn sich f r jeden Knoten die H hen der zugeh rigen Teilb ume 2 3 ABBILDUNGSOPTION VEKTOR 223 um h chstens 1 unterscheiden Dabei ist die H he eines Baumes gleich der maximalen Astl nge gr te Knotenzahl zu einem Baumblatt Ein solcher ausgeglichener Baum wird zu Ehren von Adelson Velskii und Landis kurz als AVL Baum bezeichnet In einigen LISP Systemen sind Konstrukte f r die Handhabung von AVL B umen integriert Cam bridge LISP Abschnitt A 2 S 462 N heres zu AVL Baumen z B 112 134 Ein AVL Baum ist durch einen Vektor abbildbar der die Wurzel dar stellt F r unsere Aktenverwaltung ist es ein Vektor mit den f nf Elemen ten 1 Hohe des Baums 2 Aktenzeichen Key 3 zugeordnete Aktenbeschreibung Text 4 linker Teilbaum und 5 rechter Teilbaum Die sogenannte Balance B eines Baums ist f r einen Knoten wie folgt definiert B H he des rechten Teilbaums minus H he des linken Teilbaums Zum Aufbau eines AVL Baums dient
484. ren 294 KAPITEL 2 KONSTRUKTIONEN eval gt eval list define Baz Foo Konten Management gt define Baz 1 2 oder eval gt eval eval list define Baz Foo Konten Management Konten Management eval gt eval Foo Konten Management gt 1 2 eval gt eval Baz Konten Management gt 3 Bei einem umfangreicheren Argument wirken die dann erforderli chen vielen list und quote Formulierungen wenig bersichtlich Ei ne syntaktische Vereinfachung bietet quasiquote in Verbindung mit dem unquote Konstrukt Die Kurzschreibweise f r das quasiquote Konstrukt ist das Backquotezeichen Die Kurzschreibweise f r das un quote Konstrukt ist das Komma eval gt eval define Baz eval Foo Konten Management Konten Management eval gt eval Baz Konten Management gt 3 Innerhalb des quasiquote Konstruktes hebt ein unquote Konstru kt die Wirkung als quote Konstrukt auf d h der symbolische Ausdruck nach dem Komma ist nicht vom quote betroffen In manchen F llen ist das Einsplei en engl splicing eines Wertes erforderlich Eine Liste ist als Folge ihrer Elemente also ohne Klammern in eine andere Liste ein zuf gen Dazu dient das unquote splicing Konstrukt Es ist nur in Zusammenhang mit einem unquote Konstrukt anwendbar Man beach te dass unmittelbar nach dem Komma das Zeichen sp ttisch Klam meraffe notiert ist eval gt ASCII gt American Standard
485. renzprobleme Ist das Objekt uber jeden Na men modifizierbar dann miissen wir stets alle Namen verfolgen um eine Aussage uber den Objektzustand machen zu konnen eval gt define Foo Ok eval gt alias Bar Foo nicht definiert in Scheme eval gt set Bar Neuer Wert eval gt Foo gt Neuer Wert modifiziert mit Bar nderung Wird in Scheme ein lambda Konstrukt evaluiert dann kann die ent standene Funktion auf die Umgebung zugreifen in der sie evaluiert wur de Das durch lt procedure gt repr sentierte Funktions Objekt ist ver kn pft mit seiner Definitions Umgebung Die Umgebung und die Funk tion bilden eine Einheit Bildlich gesehen umh llt die Umgebung die Funktion F r die Verkn pfung von Umgebung und Funktion hat sich daher der englische Begriff closure deutsch H lle oder auch Abschlie Sung durchgesetzt Die Umgebung ist geschlossen im Hinblick auf die Variablen engl closed over the variables weil diese nicht au erhalb bzw ohne diese Umgebung zugreifbar sind In Scheme kann der Namensraum explizit angegeben und manipu liert werden Dazu verf gt Scheme z B PLT Scheme DrScheme ber vielf ltige Konstrukte wie z B current namespace make base namespace make base empty namespace und make empty namespace Im folgenden Beispiel binden wir in einem lambda Konstrukt den aktuellen Namensraum an das Symbol env Dann wird die Definition der Fuktion Baz in diesem Namensraum definiert D
486. rftig Die qualitative Eigenschaft Benutzerfreundlichkeit ist durch mehrere abgeleitete Anforderungen zu approximieren So ist Benut zerfreundlichkeit z B gliederbar in Erlernbarkeit und Handhabbar keit Effektivit t Letztere ist approximierbar durch Einfachheit der Nut zung Durchschaubarkeit Komfort Flexibilit t und Bedienerbezogene Ro bustheit lt gt 12 Komfort w re z B realisierbar durch eine Ein Ausgabe Fenstertechnik Schrittweise pr zisieren wir A2 durch mehre re qualitative Eigenschaften f r die Ersatzleistungen angebbar sind Die Anforderung A2 ist n herungsweise ersetzbar durch eine Menge von Anforderungen die zu erf llende Leistungen spezifizieren Eine von die sen ware z B A2 1 Diagnose zeigt die jeweils m glichen Kommandos in einem eige nen Bildschirmfenster 6yolvo lat ich rolle ist ein urspr nglich schwedischer Fahrzeugkonzern Der Konzern wurde 1927 als Pkw Hersteller gegr ndet Sein plakatierter Werbespruch stammt von 1990 3 2 SPEZIFIKATION MIT LISP 409 Die Aussage A3 ist sicherlich erstrebenswert jedoch nicht wie A2 durch realisierbare funktionale Aussagen approximierbar Die Aussage A4 mag werbewirksam sein ist aber inhaltsleer Beide Aussagen haben keinen Einfluss auf die Konstruktion von Diagnose Um utopische oder inhaltsleere Aussagen auszuschalten setzen wir f r eine Anforderung voraus dass sie die Konstruktion tats chlich be einflusst gestaltet Sol
487. rg gt lt argn gt dann h ngt der Wert von der Definition des speziellen Symbols ab Ob von den einzelnen Argu menten lt arg gt lt arg gt einige evaluiert werden oder nicht be stimmt die Definition die das spezielle Symbol benennt Ein LISP System gt J Lukasiewicz x 21 12 1878 in Lemberg 13 02 1956 in Dublin war nicht nur Ma thematiker Logiker sondern auch Philosoph 24 KAPITEL 1 KONSTRUKTE A Namenlos DrScheme _ gi Sje x Datei Bearbeiten Anzeigen Sprache Scheme Einf gen Hilfe Namenlos w define v Debugger oe Syntaxpr fung a Start SE Stop Willkommen bei DrScheme Version 4 2 2 3m Sprache Fortgeschritten memory limit 128 megabytes gt 1111111111111111111111111111111111111111111111 2222222222222222222222222222222222222222222222 33399399393333 33333333333333333333333333333333333 82304526748971193415637860082304526748971193390946502 2 05761316872427983539094650205761316872674897119341563 2 1860082304526 74897119341563786 gt sin gt cos 0 5 10 8775825618903728 gt Fortgeschritten v 11 2 g Legende Dr Scheme gt http www plt scheme org Zugriff 24 Oct 2009 Abbildung 1 6 Beispiele zur EVAL Regel 2 erkennt seine speziellen Symbole so dass es nicht die EVAL Regel 2 anwendet sondern die f r das spezielle Symbol definierte Evaluierung ausf hrt Beispiele zur EVAL Regel 3 lt gt Abbildung 1 9 S 27 Spezielles Symb
488. rklasse f r die das System urspr nglich konzipiert wurde Zus tzlich sind Merkmale und Besonderheiten des Systems skiz ziert Ber cksichtigt sind Systeme mit historischer Bedeutung und mit aktuellen Installationen Die folgende Kurz bersicht erhebt keinen An spruch auf vollst ndige Nennung der Marktf hrer Die Systeme sind in alphabetischer Reihenfolge genannt A 2 SOFTWARE 463 e Allegro Common LISP http www franz com products allegrocl Zugriff 22 Jan 2010 Rechnerklasse Workstation PC Hersteller Urspr nglich Coral Software Corp PO Box 307 Cambridge MA 02142 USA Merkmale Allegro Common LISP enth lt eine Programmierumgebung abge stimmt auf die Macintosh Welt Das System ist ein inkrementeller Compiler e BYSO LISP http www jstor org pss 3680147 Zugriff 22 Jan 2010 Rechnerklasse PC Hersteller Levien Instrument Co Sitlington Hill RO Box 31 McDowell VA 24458 USA Merkmale BYSO LISP ist an Common LISP ausgerichtet hat jedoch starke Wurzeln im MacLISP und im klassischen LISP 1 5 Der Interpreter hat da her dynamische Bindungsstrategie Der Compiler hat sowohl lexikalische als auch dynamische Bindung Das Closure Konstrukt erm glicht eine objekt ge pr gte Programmierung e Cambridge LISP http www atarimagazines com startvin4 cambridgelisp html Zugriff 22 Jan 2010 Rechnerklasse PC Bezugsquelle Philgerma GmbH Barerstra e 32
489. rmen Name Make lambda Langname Kurzname if Kurzname cons Langname Kurzname list Langname eval gt define Kunde 1 Firmen Name Make Software AG SAG eval gt define Kunde 2 Firmen Name Make Siemens AG eval gt define Firmen Kurzname lambda Kurzname and string Kurzname lt string length Kurzname 3 eval gt define Firmen Kurzname Get lambda L Ersatz cond length L 1 cond length Ersatz 1 list ref Ersatz 0 3 1 TRANSPARENZ DER DOKUMENTATION 387 t UNBEKANNTER KURZNAME t list ref L 1 eval gt define syntax rule Firmen Kurzname set L Kurzname set L cons car L list Kurzname eval gt Firmen Kurzname Firmen Kurzname Get Kunde 1 t Firmen Kurzname Get Kunde 2 V eval gt gt Marien eval gt Firmen Kurzname set Kunde 2 SIE eval gt Firmen Kurzname Get Kunde 2 gt SIE Die Ber cksichtigung der Reihenfolge f hrt zu Formulierungen die im Vergleich zur Pr fix Verschl sselung L sung D ungewohnt und weni ger fl ssig zu lesen sind eval gt Firmen Kurzname Get gt zweckma ige Sortierbarkeit eval gt Get Firmen Kurzname gt relativ gute Lesbarkeit Wir haben f r die Strukturierung eines Namens die Sonderzeichen Bindestrich und Unterstrich verwendet Unsere Konvention reserviert den Bindestrich f r Funktionsnamen und damit auch f r Argumente Der Unterstrich ist f r di
490. rnbar ist wird niemand zum LISP wizard deutsch Hexenmeister durch Nach lesen von erl uterten Beispielen Das intensive Durchdenken der Bei spiele im Dialog mit einem LISP System vermittelt jedoch um im Bild zu bleiben unstrittig die Kenntnis der Stra enververkehrsordnung und erm glicht ein erfolgreiches Teilnehmen am Verkehrsgeschehen F r die sen Lernprozess w nsche ich Ihnen viel Freude Eine sp ttische Interpretation von LISP viele heimtiickische und bl dsinnige Klam mern Danksagung F r das gro e Interesse und die Durchsicht von vorher gehenden Fassungen danke ich den vielen Mitwirkenden Studierenden und Kollegen Stellvertretend f r alle sei namentlich Kollege Prof Dr Fevzi Belli erw hnt F r die Bearbeitung dieser Fassung geb hrt Frau Dipl math Karin Dening Bratfisch Herrn Dipl Kfm Norbert Tschritter und Herrn Dipl Ing Christian Wagner mein besonderer Dank L neburg den 1989 1991 Oktober 2009 12 Marz 2010 Hinrich E G Bonin Werfasser Vereinbarungen und Notation Allgemeines Aus Lesbarkeitsgrunden sind nur die mannlichen Formulierungen ge nannt die Leserinnen seien implizit ber cksichtigt So steht z B das Wort Programmierer hier f r Programmiererin und Programmierer Soweit wie m glich stehen deutsche Fachbegriffe Ausnahmen bil den Begriffe bei denen die bersetzung nicht eins zu eins m glich ist und oder die englische Fassung sich durchgesetzt hat z
491. rt bindung vollziehen or null Muster null Liste f or eq car Muster car Liste eq car Muster Simple Match cdr Muster cdr Liste Erganzung B Variable auswerten eq car Muster cond Simple Match cdr Muster cdr Liste t Simple Match Muster cdr Liste t Simple Match cdr Muster Liste t t Erganzung C Variable auswerten t Die Erg nzung A betrifft den Fall dass der Pr fling vollst ndig ab gearbeitet ist d h die lambda Variable Liste ist an null gebunden aber das Muster enth lt noch Elemente Dann ist festzustellen ob das Muster nur noch ein Element enth lt und dieses entweder das Pr dikat Symbol oder das Pr dikat Variable erf llt Ist Symbol bzw Variable erf llt dann passt das Muster so dass wir t zu r ckgeben k nnen und im Fall Variable noch das zugeh rende 254 KAPITEL 2 KONSTRUKTIONEN Symbol an null binden Wir unterstellen damit dass unser Muster auch dann passt wenn der Stern fur eine leere Folge von Elementen im Pr fling steht Die Erg nzung B betrifft den Fall dass im Muster das Pr dikat Var iable erf llt ist Hierzu ist eine entsprechende Klausel einzuf gen Wenn der Rest des Musters mit dem Rest des Pr flings passt ist das zu geh rende Symbol an den Wert zu binden Wir k nnen diese Klausel wie folgt definieren and Varaible car Muster Match c
492. rt an dem Platz gespeichert werden an den die Variable gebunden ist Den Speicher hier STORE kann man sich als ein Lexikon mit ei nem Schlagwort f r jeden Platz in LOCATIONS vorstellen Das Lexi kon dokumentiert welcher Wert an diesem Platz gespeichert ist Viele Eintragungen weisen aus dass kein Wert an ihrem Platz gespeichert ist d h der Platz ist nicht initialisiert weil er noch nicht benutzt wird Ei ne Umgebung ist ebenfalls ein Lexikon Es enth lt Schlagw rter f r jede ihrer Variablen die ausweisen an welchen Platz die Variable gebunden ist Manche Eintragungen dokumentieren dass die Variable ungebunden ist d h die Variable ist an keinen eigenen Platz gebunden sondern an den Platz der ungebunden entspricht Aus der zeitlichen Perspektive sind daher zwei Aspekte zu betrach ten 1 Namen die ihre Werte Quantit ten ndern und 2 Werte die ihre Namen ndern In der klassischen Programmierung z B in der COBOL Welt kon zentriert man sich auf die Namen und verfolgt schrittweise ihre Wer teanderung Im Kontext der 1ambda Bindung ist die zweite Sicht zweck m ig Es geht um Werte die neu benannt werden Die 1ambda Variable 46 KAPITEL 1 KONSTRUKTE ist ein neuer Name fiir den Wert eines Arguments So gesehen ist das lambda Konstrukt ein Umbenennungs Konstrukt lt gt 172 Exkurs Aliasname Die Moglichkeit einem existierenden Objekt mehrere Namen geben zu konnen verursacht Transpa
493. rukt wie folgt eval gt define cdr string lambda String letrec Ende Position string length String 1 Vorspann Space t space lambda Pos 2 4 ABBILDUNGSOPTION ZEICHENKETTE UND SYMBOL 247 char string ref String Pos space Von Analyse lambda Aktuelle Position cond lt Aktuelle Position Ende Position cond and Vorspann Space space Aktuelle Position Von Analyse Aktuelle Position 1 space Aktuelle Position substring String Aktuelle Position Ende Position 1 t set Vorspann Space f Von Analyse Aktuelle Position 13733 Aktuelle Position Ende Position 1 make string 0 t display Kein cdr string bestimmt display string Von Analyse 0 1 eval gt cdr string Alles klar gt klar Mit den erstellten Selektoren car string und cdr string k nnen wir den obigen Mustervergleich f r Zeichenketten formulieren Das Simple Match Konstrukt hat dann folgende Definition Programm Simple Match eval gt define Simple Match lambda Muster String cond and string null Muster string null String t and string null String string null cdr string Muster string car string Muster t or string null Muster string null String or string car string Muster car string String string car string Muster Simple Match cdr string Muster cdr string Strin
494. ruktes nm Eck und zwar aufgrund der Applikation von n Eck innerhalb von mn Eck Die komplex wirkende Grafik Abbildung 1 19 S 95 basiert daher auf zwei ineinander geschachtelten Iterationen Lineare Konstrollstrukturen Im Rahmen des Entwurfes von linearen Kontrollstrukturen Exkurs S 98 werden Iterationen oft in der von I Nassi und B Shneiderman 138 vorgeschlagenen Form dargestellt Abbildung 1 20 S 98 Die Iteration mit der Bedingungspr fung vor jedem Wiederholungsdurch lauf wird auch abweisende Schleife oder salopp kopfgesteuerte Schlei fe genannt Sie ist zu unterscheiden von der Iteration mit der Bedin sungspr fung nach jedem Wiederholungsdurchlauf Diese wird als nicht abweisende Schleife oder salopp fu gesteuerte Schleife bezeichnet Im ersten Fall dem while Konstrukt wird so lange wiederholt bis die Bedingung erf llt ist Im zweiten Fall dem unti1 Konstrukt wird der Wiederholungsvorgang beendet wenn die Bedingung erf llt ist 12Der Mathematiker David Hilbert x 23 01 1862 K nigsberg 14 02 1943 G ttingen hat eine stetige Kurve entdeckt die durch Wiederholung ihres Konstruktionsverfahrens jedem beliebigen Punkt einer quadratischen Fl che beliebig nahe kommt und die Fl che vollst ndig ausf llt Im bertragenen Sinne bildet das mn Eck eine Hilbert Kurve ab 1 2 KOMBINIEREN VON KONSTRUKTEN oF eval gt Bereitstellung der klassischen Turtle Grafik require graphics tur
495. ruktion mit LISP 14 Aufgrund der Veranstaltung Advanced Programming im Leuphana Bachelor Minor Angewandte Informatik im Wintersemester 2009 10 sind didaktisch bew hrte Beispiele modernisiert und an die Weiterentwicklungen im LISP Bereich angepasst worden z B dient nun das moderne PLT Scheme 2 mit der Entwicklungsumgebung von DrScheme Version 4 2 3 Dez 2009 sowie Bibliotheken von mzscheme als LISP Leitdialekt Sicherlich l sst sich LISP n chtern und sachlich erl utern ohne vom Glanz der LISP Philosophe zu schw rmen Dieses Buch versucht je 2 PLT Scheme http www plt scheme org Zugriff 24 Oct 2009 doch die Begeisterung des Autors ftir das moderne LISP zu verdeut lichen Erst wenn die Lots of Insidious Silly Parentheses in sthetische Konstrukte umschlagen kommt zur Zweckm igkeit auch noch die Freu de Dieses Buch ist konzipiert als ein Arbeitsbuch zum Selbststudium und f r Lehrveranstaltungen Der LISP Neuling m ge es Abschnitt f r Ab schnitt sequentiell durcharbeiten Der LISP Vorbelastete kann zun chst die Zusammenfassungen der einzelnen Abschnitte studieren Anhand ih rer zus tzlichen charakteristischen Beispiele ist individuell entscheidbar ob der Inhalt des jeweiligen Abschnittes schon bekannt ist Damit das Buch auch sp ter als Nachschlagewerk hilfreich ist enth lt es sowohl Vorw rts wie R ckw rts Verweise Ebensowenig wie z B Autofahren allein aus B chern erle
496. ruktionsbegleitende Dokumente Testprotokolle Integrations pl ne etc und 3 nachbereitende Dokumente Wartungsrichtlinien Installationsan weisungen etc zu erstellen Wir untergliedern daher die Dokumentation in Dokumente die das Ergebnis die Software im engeren Sinne beschreiben und in Dokumente die den Prozess ihrer Erstellung nachweisen Konstruktions Dokumentation Dokumentation l Konstruktions Prozessdokumentation In der Praxis entstehen Dokumente mehr oder weniger iterativ Ide enskizzen werden erg nzt verworfen weiterentwickelt Bei diesem Ite rations Prozess ist die allgemein bliche Arbeitsteilung in so eben mal skizziert und in Reinschrift mit ausreichender Erkl rung auf kreative Ausnahmef lle zu begrenzen Jede Aktivit t im Rahmen des Konstrukti onsprozesses ist gleich so zu notieren dass sie Teil der Dokumentation sein kann Unstrittig ist es ein echtes Problem wie die entscheidenden Konstruktions Absprachen vielleicht notiert auf einem Bierdeckel ohne Fehler in die Konstruktions Prozessdokumentation gelangen zumal kei ner den Mut haben wird den Bierdeckel dort abzuheften Zu fordern ist daher jede Idee unverz glich rechnergest tzt zu notieren entweder direkt in ein LISP System oder in einen Texteditor Sowohl in den ersten Phasen des Konstruktions Prozesses als auch in den Phasen Wartung Pflege und Fortentwicklung hat man das Problem sich auf die wesentlichen Aussagen zu
497. rung durch Makros 2 5 4 Zusammenfassung Continuation und Makros 2 6 Generierte Zugriffskonstrukte 2 2 2 css 205 2 6 1 Abschirmung von Werten 2222020000 2 6 2 define struct Konstrukt 2 6 3 Einfache statische Vererbung 2 6 4 Zusammenfassung Zugriffskonstrukte als Schnittstelle 2 7 Module Lokaler Namensraum 2 7 1 Import und Expornamen 2 u Fa eee 4 2 7 2 Zusammenfassung Module 2 8 KlasseInst anz Modell 2 2 2 do a a Au wu a da a aa 2 8 1 Object Oriented Programming System 2 8 2 Vererbung Interfaces Mixins und Traits 2 8 3 Zusammenfassung Spezialisierung und Faktorisierung 2 9 Kommunikation 000 eee eee eee ens 2 9 1 HTTP Kommunikation 4 4 9 Da na oe ae ws 2 9 2 Thread System 5 20 005s eee ern nn 2 9 3 Zusammenfassung Kommunikation Konstruktionsempfehlungen 3 1 Transparenz der Dokumentation 4 SALI DEI s ha oes ooo eee ee Gee ee a Bee 3 1 2 Kommentierung 444664444 6544 24 ee Eee RS 3 1 3 Vorw rts und R ckw rtsverweise 3 1 4 Zusammenfassung Namen Kommentare und Verweise 3 2 Spezifikation mit LISP ar dhe etetebhde Benn es 3 2 1 Anforderungen an Anforderungen 3 2 2 Import Export Beschreibung 2 a lt 4 se amp 4 6 a 3 2 3 Zusammenfassung Spezifikation 3 3
498. rung durch Makros zeigen wir am Beispiel definep einem Konstrukt das mehrere Symbole binden kann lt gt Abschnitt 2 5 3 S 293 Die in Kapitel I skizzierte Kontenver waltung verwenden wir um Schritt f r Schritt die Objektpr gung von Konstruktionen zu steigern Zur Abschirmung von Wertebeschreibungen Abschnitt 2 6 1 S 306 dient zun chst das define struct Kon strukt gt Abschnitt 2 6 2 S 309 Aufbauend auf die damit realisierba re einfache statische Vererbung Abschnitt 2 6 3 S 314 wird die Ab bildungsoption Klasse Instanz erkl rt Abschnitt 2 8 S 327 Eine Klasse Instanz Kontenverwaltung zeigen wir mit dem Object Oriented Programming System von PLT Scheme lt gt Abschnitt 2 8 1 S 329 Es erlaubt vielf ltige Optionen der Vererbung Abschnitt 2 8 2 S 337 2 1 Verstehen einer Konstruktion Wollen wir Konstruktionen Programme verstehen dann sind die ein zelnen Konstrukte und ihre Verkn pfungen Wechselwirkungen unter einander zu analysieren Da die verfolgten Analysezwecke vielf ltig sind m ssen Konstrukte im Hinblick auf unterschiedliche Aspekte hinreichend verstanden werden Die Konstrukte k nnen z B nach ihrer Aufgabe ihrem Leistungsumfang oder ihrer Abarbeitung durch das LISP System untersucht werden gt Abschnitt 2 1 1 S 145 Eine derartige Klassifikation zeigt Tabelle 2 1 S 142 So geh rt z B das do Konstrukt S 90 in Scheme zur Klasse der eingebauten Kon s
499. s dann bezeichnen wir ihn als ein Objekt Symbolische Ausdr cke betrach ten wir allgemein als Werte z B als R ckgabewert einer Funktion Mathe matisch gesehen existiert ein Wert engl value und ist nicht nderbar an seine Stelle kann nur ein neuer Wert treten Das Verstehen der anwendungsspezifischen Bedeutung eines Listen elementes setzt voraus dass wir seine Position innerhalb der Liste ken nen Kurz gesagt Die Position ist Informationstr ger Wir nehmen f r das Konto z B an dass folgende Selektoren definiert sind eval gt define Kontonummer lambda Liste list ref Liste 0 eval gt define Kontentyp lambda Liste list ref Liste 1 eval gt define Name des Kontoinhabers lambda Liste list ref Liste 2 eval gt define Datum letzte Buchung lambda Liste list ref Liste n Damit der jeweilige Selektor das richtige Attribut ermittelt ist si cherzustellen dass die Position eines Attributes sich in der Liste nicht verschiebt Die 1ambda Variable Liste der obigen Selektoren ist an ein Konto zu binden bei dem die definierte Struktur statisch ist L schen eines Attributwertes setzt voraus dass die Listenelemente ihre Positi on nicht ndern Daher ist der aktuelle Attributwert beim L schen durch einen vereinbarten Ersatzwert engl default value bzw L schwert z B null oder list zu ersetzen Die Maxime Position ist Informations tr ger ist statisch und daher nur bedingt geeignet f r
500. s Ergebnis der Wortz hlung im Resttext Die bisherige De finition entspricht dem erl uterten Laenge Konstrukt Ist keine ber einstimmung gegeben dann ist die gesuchte L sung gleich dem Ergeb nis der Wortz hlung im Resttext Der Resttext ist die Restliste d h der Text ohne das erste Wort Die Abbildung stellt diese L sung als Strukto gramm dar Die Beschriftung orientiert sich dabei an der von I Nassi und B Shneiderman f r ihr Fakult tsbeispiel gew hlten Notation 138 Diese Notation l sst allerdings die wesentliche Unterscheidung zwischen der Applikation einer Funktion und der Darstellung des Funktionswertes nur schwer erkennen wie auch die Legende in Abbildung 1 23 S 120 zeigt Entsprechend dem Struktogramm ist die Funktion wie folgt zu de finieren 16Schreibweise mit B entspricht dem Originaltext 120 KAPITEL 1 KONSTRUKTE Wortzaehlung lt wort gt lt text gt erste Wort in lt text gt 9 Wort lt wort gt zaehlung 0 Wortzaehlung 1 Wortzaehlung Wortzaehlung lt wort gt lt wort gt lt resttext gt lt resttext gt return Wortzaehlung Legende Grafische Darstellung einer Rekursion als Struktogramm DIN 66261 Struktogramme 138 Wortzaehlung 0 Der Wert der Funktion ist 0 Wortzaehlung lt wort gt lt text gt Die Funktion wird angewendet auf die Argumente lt wort gt und lt text gt return Wortzaehlung Der Funktionswert wird ausgegeben Abbildung 1 2
501. s Formulieren des Musters Ein Nachteil ist jedoch dass wir die Zusicherung aufgeben aus den selektierten Tei len wieder das Ganze in urspr nglicher Form erstellen zu k nnen Abschnitt 2 1 2 S 146 Das string append Konstrukt verbindet zwei Zeichenketten zu einer Wenden wir dieses Konstrukt auf die selektierten Zeichenteilketten an dann fehlen dem Ergebnis die Zwischenr ume die zu Beginn der Zeichenkette standen eval gt string append car string more LISP cdr string more LISP gt more LISP Unsere Selektoren car string und cdr string nutzen den ein gebauten Selektor substring Das substring Konstrukt ist wie folgt definiert eval gt substring lt string gt lt start gt lt ende gt gt lt substring gt 244 KAPITEL 2 KONSTRUKTIONEN mit lt string gt Eine Zeichenkette lt start gt Eine ganzzahlige nicht negative Angabe der Po sition des ersten Zeichens der zu selektierenden Zeichenkette Die Zahlung der Position beginnt bei 0 Bedingung ist and lt 0 lt position gt lt asa gt string length lt string gt lt ende gt Eine ganzzahlige nicht negative Angabe der Po sition des ersten Zeichens das nicht mehr zur Zei chenkette geh ren soll Die Z hlung der Position beginnt bei 0 Bedingung ist and lt 0 lt ende gt lt lt ende gt string length lt string gt lt lt start gt lt ende gt lt substring gt Die se
502. s Funktion appliziert dann ist sie selbst ihr erstes Argument Die Technik sich selbst als Argument zu nutzen er gibt den rekursiven Bezug Etwas leger formuliert Wir berlisten das let Konstrukt indem wir die Rekursivit t durch die Hintert r als Pa rameter bergabe realisieren Die zus tzliche 1ambda Variable f r die Selbst bergabe wollen wir von den anderen lambda Variablen trennen mit dem Ziel den Selbst bergabe Mechanismus isoliert betrachten zu k nnen F r diese Tren nung nutzen wir das sogenannte Curryfizieren von Funktionen H B Curry hat nachgewiesen dass zu jeder Funktion h herer Ord nung F eine Funktion F existiert f r die gilt 44 TEE E ay lu 5 Das folgende Beispiel zeigt das Curryfizieren engl currying anhand von drei lambda Variablen eval gt define Foo lambda x y 2 list x y Z Foo a b c gt a b c define Curryfizierte Foo lambda x lambda y lambda z list x y z Curryfizierte Foo a b c gt abe eval gt eval gt eval gt Bezogen auf die Definition von Summe erhalten wir eval gt let Summe lambda Funktion lambda Liste cond null Liste 0 number car Liste car Liste Funktion Funktion cdr Liste t Funktion Funktion cdr Liste Summe Summe Zahlungen gt 80 0 14 Haskell Brooks Curry x 12 Sep 1990 in Millis Massachusetts 1 Sep 1982 in St
503. s Rechners effizient ausnutzen Ein Pro grammierer kann ein solches Programm in der Regel nur m hsam ver stehen Ein Text in einer Assembler Sprache formuliert ist im Allgemei nen aufwendiger zu durchschauen als ein quivalenter Text notiert in einer h heren Programmiersprache Daf r wird der Assembler Text als eine 1 1 Abbildung des Maschinencodes vom Rechner mit weniger Auf wand in konkrete Arbeitsschritte umgesetzt Eine Programmiersprache ist daher stets ein Kompromiss zwischen den unterschiedlichen Anfor derungen der Kommunikations Partner Mensch und Maschine In einer nat rlichen Sprache kann ein Sachverhalt klar und leicht verst ndlich oder umst ndlich verkompliziert und missverst ndlich beschrieben werden Kurze S tze mit pr gnanten Begriffen verkn pft durch eine systematische Gliederung helfen einen Sachverhalt besser klarer und schneller zu vermitteln als lange S tze mit stark verschachtel ten Bez gen In jeder Programmiersprache also auch in LISt Processing LISP steht man vor einem hnlichen Formulierungsproblem Es k nnen leicht durchschaubare transparente oder undurchschaubare bzw nur sehr schwer durchschaubare Texte notiert werden Es geht daher um die Wahl geeigneter Begriffe Sprachkonstrukte und um ihre Kombination zu einem transparenten Text der den Sachverhalt die Probleml sung so einfach wie m glich vermittelt blicherweise beginnt der Einstieg in eine formale Programmier Spr
504. s rekursive Akronym lambda lambda auch mein bestens definierbares Arbeitsmittel Ersetzt man das lambda der rechten Seite durch die Definition dann erh lt man nach zweimaliger Anwendung folgendes Unget m lambda auch mein bestens definierbares Arbeitsmittel auch mein be stens definerbares Arbeitsmittel auch mein bestens definierbares Arbeits mittel 116 KAPITEL 1 KONSTRUKTE Bei der Anwendung einer rekursiven Definition sind zunachst Zwi schenl sungen f r die Teilprobleme zu vermerken bis eine triviale L sung erreicht wird Von dieser k nnen dann r ckw rts die vermerkten Teilprobleme gelost werden Im allgemeinen Rekursionsfall wachst da her der Speicherbedarf mit der Zahl der erforderlichen Zwischenschrit te Die Anzahl der geschachtelten Aufrufe wird als Rekursionstiefe der Funktion bezeichnet Im speziellen Fall der sogenannten Restrekursion engl tail recursion ist der Speicherbedarf konstant Er ist unabhangig vom Wert des Argumentes und damit unabhangig von der Rekursions tiefe Bei der Restrekursion ist das Teilproblem Ergebnis der gr ten Re kursionstiefe das Problem Gesamtergebnis Hinweis Restrekursion S 116 Effiziente LISP Systeme erkennen ob eine Definition eine Restre kursion darstellt und arbeiten diese dann mit konstantem Speicherbe darf entsprechend einer Iteration ab Fur Scheme Systeme wird diese Eigenschaft gefordert lt gt 151 Der Benutzer kann sich somit auf rekursive
505. s wendet sich der Text an Dritte an Mitkonstrukteure und an das Wartungs Pflege und Fortentwicklungs Personal lt gt Abbildung 1 1 S 12 Programmieren ist damit das Erstellen von Texten aus sprachlichen Konstrukten welche die Arbeit eines Rechners bestimmen Programmiersprachen k nnen st rker die Kommunikation mit dem Rechner oder die zwischen Programmierern unterst tzen Ein in Ma schinencode notiertes Programm kann das gesamte Leistungsverm gen 11 12 KAPITEL 1 KONSTRUKTE Programm konstrukteure Pro Rechner grammier sprache Interpretiert f hrt aus Programm pfleger und fortentwickler Abbildung 1 1 Kommunikationsmittel Programmiersprache Start ss DrScheme i 15 x Datei Bearbeiten Anzeigen Sprache Scheme Einf gen Hilfe Macro Stepper Y Debugger Syntaxpr fung Q Start R Stop Start ss define Y module Start scheme lambda Hello World zi Willkommen bei DrScheme Version 4 2 3 3m B Sprache Module memory limit 512 megabytes Hello World gt zi 4 2 g Module Legende Das lambda Konstrukt eingebettet in dem Modul Start wird ausgewertet und hat als Wert ein Symbol dessen Namen aufgrund des Leerzeichens durch ein sogenanntes Flucht symbole begrenzt ist N heres zum genutzten PLT Scheme System Abschnitt 5 S 15 Abbildung 1 2 Klassisches Beispiel Hello World 13 Verstehbarkeitspotential de
506. samt ein Pro gramm ist das aus den Moduln Teil 1 Teil 2 und Teil 3 besteht Aufgrund der Abbildungsgleichheit von Programm und Daten ist auch annehmbar dass Gesamt eine Datenstruktur abbildet z B eine An schrift die aus der Folge Stra e Teil 1 Postleitzahl Teil 2 und Wohnort Teil 3 besteht Eine Sequenz mit dem Namen Gesamt und den Teilen Teil 1 Teil 2 Teil 3 stellt Abbildung 1 16 S 70 gra fisch dar Diese Darstellungsform wurde von M A Jackson insbesondere f r den Programmentwurf vorgeschlagen 98 Zur Erl uterung der Se lektion S 80 und der Iteration S 89 wird ebenfalls die Jackson Notation genutzt Die abgebildete Sequenz sei die Zerlegung Modulari sierung eines Programms Das sogenannte Laufenlassen des Programms Gesamt bedeutet das Abarbeiten der Moduln Teil 1 Teil 2 und Teil 3 Wir formulieren daher eine Funktion Gesamt aus den Teilen Teil 1 Teil 2 und Teil 3 Programmfragment in Tabelle 1 11 S 70 1 2 KOMBINIEREN VON KONSTRUKTEN 71 Gesamt und die Moduln Teil 1 Teil 2 und Teil 3 Sind als Funktionen definiert eval gt define Gesamt lambda Teil 1 Teil 2 Teil 3 eval gt define Teil 1 lambda lt sexpr gt f r Modul Teil 1 eval gt define Teil 2 lambda lt sexpr gt f r Modul Teil 2 eval gt define Teil 3 lambda lt sexpr gt f r Modul Teil 3 Tabelle 1 12 Programmfragment Sequenz von Funktionsanwendungen Im Programmf
507. sche Beispiel 186 S 227 230 Beispiel Ausgabe des Alphabetes Zur Ausgabe der kleinen und gro en Buchstaben des Alphabetes defi nieren wir die beiden Konstrukte Upcase Alphabet und Downcase Alphabet eval gt define Upcase Alphabet lambda do 1 65 i 1 gt 1 90 newline 7 Thread leichtgewichtiger Prozess oder Aktivit tstr ger 28 Auch als User level Thread oder Fiber bezeichnet 22Die Begriffswelt in der Informatik ist facettenreich So wird der Begriff Task deutsch Aufgabe auch als Synonym ftir Prozess verwendet Dann spricht man vom Multitasking zur Abgrenzung zum Multithreading 356 KAPITEL 2 KONSTRUKTIONEN display integer gt char i eval gt Upcase Alphabet gt ABCDEFGHIUKLMNOPORSTUVWXYZ eval gt define Downcase Alphabet lambda do 1 97 i 1 gt 1 122 newline display integer gt char i eval gt Downcase Alphabet gt abcdefghijklmnopgrstuvwxyz Die Pr fung der Iteration und die Typkonvertierung mit integer gt char sind in beiden Konstrukten voneinander unabh ngig Diese Tei le k nnen daher nebenl ufig durchgef hrt werden Nebenl ufigkeit engl Concurrency bedeutet ihre Abarbeitung kann in einem betrach teten Zeitraum voneinander unabh ngig erfolgen F r die Abarbeitung dieser Aufgaben von Upcase Alphabet spielt es keine Rolle was gera de bei der Abarbeitung von Downcase Alphabet passiert Zun chst definieren wir
508. scheme 4 Willkommen bei DrScheme Version 4 2 2 3m Sprache Module memory limit 128 megabytes gt if 7 Ja Nein Ja gt if Nicht doch Ja Nein Ja gt if a Ja Nein Ja gt if cos 1 Ja Nein Ja gt if a b c Ja Nein Ja gt Module 13 2 g Legende Dr Scheme gt http www plt scheme org Zugriff 24 Oct 2009 Abbildung 1 8 Beispiele zu wahr Die Aufgabe des define Konstruktes ist nicht die R ckgabe eines Wertes sondern das Binden eines Symbols an einen Wert Anders formu liert Zwischen dem Symbol und seinem Wert entsteht eine Verbindung Assoziation Das Symbol benennt den Wert Das define Konstrukt ist somit der Benennungsoperator f r symbolische Ausdr cke e Common LISP setq Konstrukt Die Bindung bernimmt in Common LISP und in vielen anderen Dialekten das setq Konstrukt Sein R ckgabe Wert ist nicht das Symbol sondern der Wert an den das Symbol gebunden wird Beispiele zum define Konstrukt eval gt define M ller OHG 0 14 100 gt kein R ckgabewert eval gt define Meyer AG D 76131 Karlsruhe gt kein R ckgabewert Common LISP C eval gt SETO M LLER OHG 0 14 100 gt 14 e EVAL Regel 4 Evaluieren eines Symbols Ist der symbolische Ausdruck ein Symbol dann ist sein Wert der jenige symbolische Ausdruck an den es in der aktuellen Umgebung 1 1 EINFUHRUNG HANDHABUNG VON KONSTRUKTE
509. schen Grafen aus der auf dem Kopf steht Sie verdeutlicht dass die ser Baum zun chst in Richtung auf die Bl tter untersucht wird ehe der n chste Zweig in Betracht gezogen wird Gilt es z B einen Weg vom Startknoten H zum Zielknoten F zu finden dann stellt Abbildung 2 13 S 201 die Knoten dar die bei der Tiefensuche abzuarbeiten zu expan dieren sind ehe der Zielknoten F erreicht wird Zun chst ist zu ent scheiden welcher Nachfolger vom Startknoten H als erster zu untersu chen ist Ist C oder G zu w hlen Wir nehmen C da C als erster Knoten in der Liste der Nachfolger von H genannt ist eval gt getprop H Nachfolger gt C 14 G 17 5 Da C nicht der Zielknoten ist ist zu entscheiden ob zun chst der er ste Nachfolger von C hier D oder der bisher nicht gepr fte Knoten G zu analysieren ist Im Sinne der Tiefengewinnung verfolgen wir erst D weiter also den ersten Nachfolger Knoten Kind Knoten von C Wir steigen im Suchbaum zun chst auf dem linken Ast eine Ebene tiefer vorausgesetzt es gibt dort noch eine solche Ebene bevor wir die an deren Knoten auf gleicher Ebene untersuchen Knoten die schon darauf berpr ft wurden dass sie nicht der Zielknoten sind m ssen dabei nicht noch einmal analysiert werden sind also nicht mehr zu ber cksichtigen Im Programm Depth first Search Programmcode S 203 merken wir uns die noch zu expandierenden Knoten als eine einfache Li
510. schnitt 1 3 S 113 Mit dem Fixpunktoperator Y skizzieren wir eine Implementationsalternative Abschnitt 2 5 1 S 277 Das letrec Konstrukt deckt die Sequenz ebenso ab wie das let Konstrukt Zu beachten ist dabei die Reihenfolge f r die Bindung einer Variablen Im ersten Schritt wird die Variable in der Umgebung vermerkt und berdeckt damit eine globale Defintion obwohl ihr Startwert im Prinzip nicht zugreifbar sein sollte Folgende Formulierungen bauen auf diesem Startwert auf Wir vermeiden derartige Konstruktionen zu mal sie dar ber hinaus leicht zu Fehlern f hren eval gt define Foo Bar eval gt letrec Foo list Foo Foo Foo gt lt undefined gt lt undefined gt eval gt letrec Foo 2 Foo print Nicht OK gt ERROR Nichtnumerischer Operand f r arithmetische Funktion Die bisherige Diskussion der Sequenz fu t auf dem 1 ambda Konstrukt Gezeigt wurde dass die Sequenz als Applikation der anonymen Funkti on formulierbar ist eval gt lambda P X P_Y Teil 1 Teil 2 Teil 3 Argument 1 Argument 2 gt Ein LISP System verf gt f r die Sequenz ber ein spezielles Kon strukt im Sinne von eval Regel 3 S 23 In Scheme ist es das begin Konstrukt Ist das Symbol begin das erste Listenelement dann 10 Z B ist in PC Scheme dieser Startwert jedoch gleich NIL 1 2 KOMBINIEREN VON KONSTRUKTEN II werden die Argumente der Reihe nach ausgewertet Der Wert des
511. se rem Beispiel ein Konstrukt das feststellt ob es sich bei einer gegebenen 2 1 VERSTEHEN EINER KONSTRUKTION 147 TLC LISP L sung zum Feststellen ob eine Zahl N gerade ist T eval gt LET GERADE LAMBDA COND N ZEROP N T T UNGERADE SUB1 N UNGERADE LAMBDA N COND ZEROP N NIL T GERADE SUB1 N GERADE 44 gt T eval gt LOsung portiert nach Scheme define zerop zero Namensangleichung eval gt Portierungsproblem TLC LISP dynamische Bindung SCHEME statische Bindung letrec Hier letrec nicht let gerade lambda n cond zerop n t t ungerade subl n ungerade lambda n cond zerop n f t gerade subl n gerade 44 gt t Legende TLC LISP 183 Tabelle 2 2 Programmfragment Portierung von TLC LISP nach Scheme 148 KAPITEL 2 KONSTRUKTIONEN Iteration mittels go to Konstrukt T eval gt PROG X Y PROG definiert X und Y SETO X 10 als lokale Variablen SETO y 0 LOOP PRINT TIMES Y Y SETQ Y ADD1 Y SETQ X SUB1 X cond ZEROP X RETURN Y Verlassen der Iteration T GO LOOP Ze O 1 4 9 16 25 36 49 64 jede Zahl auf neuer Zeile 81 10 L sung portiert nach Scheme Portierungsproblem Das Erkennen und Verstehen der go to Konstruktion und die Auswahl der zweckm igen L sung in Scheme ev
512. seits wissen wir dass sehr komplexe Konstruktionen mit unstrukturierten Konstrukten relativ kurz notiert werden konnen Zu Recht sind daher auch Strukturen zu ber cksichtigen die wir heute als ziemlich unstrukturiert empfinden und vor denen wir in der Ausbildung noch warnen 38 S 50 Bei spielsweise sind wir mit dem call cc Konstrukt Abschnitt 2 5 2 S 285 in der Lage komplizierte nichtlineare Strukturen abzubilden Zur Transparenz solcher nichtlinearen Strukturen k nnen verbale Kommentarzeilen nur begrenzt beitragen Letztlich helfen sie nur bei transparenten Programmen Diese brauchen Kommentare jedoch nicht da sie ja schon transparent sind im Gegenteil eine Kommentierung verl ngert das Dokument erh ht den Wartungsaufwand weil die Kom mentare mit gepflegt werden m ssen und schadet daher So gesehen 390 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN m ssten wir jede Kommentarzeile ablehnen Vorsichtshalber ware ei ne Streichung des Semikolons als Kommentarpr fix aus unserem LISP System vorzunehmen lt gt 102 Im Gegensatz dazu setzen viele Dokumentationsempfehlungen auf die intensive Kommentierung Grofsz giger Gebrauch von Kommentaren ist guter Programmierstil 190 deutsche Fassung S 48 oder I can t recommend them highly enough 78 p 39 Wir bef rworten einen pragmatischen Standpunkt und empfehlen Kommentarzeilen spar sam zu verwenden und warnen vor einer berko
513. set Bisheriger Bearbeiter Karl Meyer eval gt send OV001 get Bisheriger Bearbeiter gt Karl Meyer eval gt get field Aktuelle Bearbeiter OV001 gt Fischer eval gt send OV001 get Identifizierung gt ERROR send no such method get Identifizierung for class Ohne in der alltaglichen Programmierpraxis die Folgen ganz konkret durchdacht zu haben wahlt man haufig die Reihenfolge beim Mixen die hier auch hatte sein konnen eval gt define Offener Vorgang Akte mixin Bearbeitung mixin Verwahrkonto eval gt define OVOOl new Offener Vorgang id 9 name Erika Musterfrau eval gt send OV001 get Identifizierung rs 344 KAPITEL 2 KONSTRUKTIONEN Wir nutzen nun beim Mixen die Uberwachung der Einhaltung der Interfaces Aus Gr nden der Vereinfachung und damit dem leichteren Verstehen setzen wir hier nur voraus dass die sp tere Superclass das Interface Verwahrkonto interface S 340 implementiert eval gt define Akte mixin mixin Verwahrkonto interface super new define Aktenzeichen XYZ define Standort Archiv define public get Aktenzeichen lambda Aktenzeichen define public get Standort lambda Standosre define public set Aktenzeichen lambda Text set Aktenzeichen Text define public set Standort lambda Ort set Standort Ort eval gt Akte mixin gt lt procedure Akte mixin gt Damit definieren wir analog wie schon vorher uns
514. sich nicht nur in Bezug auf die spezifizierte Aufgabe die es korrekt abzubilden gilt sondern auch daran ob das Konstrukt sp ter einfach anderbar und erg nzbar ist Der gesamte Software Lebenszyklus ist Bewertungsma stab F r den symbolischen Ausdruck Liste verf gt ein LISP System ber den eingebauten Konstruktor cons mit den zugeh renden Selektoren car und cdr sowie ber ein Pr dikat das feststellt ob die leere Liste vorliegt Das Pr dikat eq pr ft die Identit t zweier symbolischer Aus dr cke F r den Test auf Gleichheit von zwei Listen gibt es das Pr dikat equal Konstrukte sind verkn pfbar als Sequenz Selektion und Iteration Zur Abbildung der Sequenz dienen die Komposition von Funktionen und Konstrukte wie begin oder beginO Das lambda Konstrukt hat in seinem Teil Rechenvorschrift eine implizit definierte Sequenz da es dort eine Folge symbolischer Ausdr cke der Reihe nach auswertet Das let Konstrukt als syntaktisch vereinfachte Anwendung einer anonymen Funktion Applikation eines lambda Konstruktes bindet seine lokalen Variablen nicht in einer Sequenz Erst das let Konstrukt vollzieht diese Bindung sequentiell Die Selektion ist mit Konstrukten wie if cond oder case realisier bar Die Iteration ist einerseits mit dem umfassenden do Konstrukt und andererseits mit map Konstrukten mapping functions abbildbar Die Ite ration ist als Sonderfall der Rekursion betrachtbar Sie wird daher auch als rekursive F
515. spondierende Selektoren um bei ei nem zusammengesetzten Konstrukt auf seine einzelnen Einheiten zu greifen zu k nnen Die Selektoren haben die Aufgabe der Umkehrung der Konstruktor Wirkung F r den Konstruktor K 1 in Abbildung 2 1 S 149 w ren folgende Selektoren zu definieren eval gt Selektor K 2 K 1 eval gt Selektor K 3 K 1 Die Analyse und damit das Verstehen werden erleichtert wenn wir 150 KAPITEL 2 KONSTRUKTIONEN von folgenden Eigenschaften bei unserem Verbund aus Konstruktoren Selektoren und Pradikaten ausgehen konnen eval gt Selektor K 2 Konstruktor K 1 K 2 K 3 gt K 2 eval gt Selektor K 3 Konstruktor K 1 K 2 K 3 gt K 3 eval gt K 2 Selektor K 2 Konstruktor K 1 K 2 K 3 gt t eval gt K 3 Selektor K 3 Konstruktor K 1 K 2 K 3 gt t Wir streben daher f r alle Abstraktionsebenen diese Verbundeigen schaften an Sie sind allgemein wie folgt beschreibbar eval gt lt selektor bauteil gt lt konstruktor gt lt bauteil gt lt bauteil gt gt lt bauteil gt eval gt lt praedikat bauteil gt lt selektor bauteil gt lt konstruktor gt lt bauteil gt lt bauteil gt H t Der Verbund von Konstruktoren Selektoren und Pr dikaten erm glicht Neukonstruktionen Soll eine bestehende Konstruktion ge ndert also nicht von Anfang an neu zusammengesetzt werden dann sind Modi fikationskonstrukte s
516. st 2 S 1 t list S 1S 2 Die Selektion eines Summanden ware bei diesem Konstruktor nicht mehr in jedem Fall m glich eval gt Erster Summand Make Summe 5 7 gt ERROR Grund list ref 12 1 157 2 1 VERSTEHEN EINER KONSTRUKTION USITSOTAY SWWLIZOId S P I9ZZINSINIAN UIS p 7 IAPqEL 08 S lt gt WODYaTas Joule SuNUYIIezuUSy ANMASUOY 1 qUNU u meq Zur Wap jne 39JUeJISUOY Jolseq g z me Wotseq 1oyyNYsuoy sy OPPS S GYNMsuoyssunuusy1y JyYIpeid d jasoissunjs qy Uspustpeidsjus Jap N S aay N S YPY jesoissunile qy Uspusydeidsjus Jap N dYUT N S JUIT EST S spoowUeIs0Ig 9PU939 N S JUTT gt S qANpoTId pT TTE T qQUNU yx WyNporAg syoesutTozoy geri Suisse pie oe O1d4 SpITE NM aes JUN TDI ILD TORZSYTTATIATNW puey TTOTIATNW S 2e0 Ds cared 9x9nNporg ig aes oyuUryT Go eG SIINNPOIA Soule U N JqY 14A N S AUTT gt S porda epT td requnu SuunS SUDEJUTIAHA STI 9wuns sap Ttd J 99S Say apa zed puewuns A1923T9NZ puewwns 794s IH aeD bo gated gowung iq ayes AUI a n p wung Joul USNOJqV O Torere D gOTgera CA SUOTSTO f TOQW S S qETTEA d 9195 our suos spf 0 2 x n swf np USJIELIEA IOUI9 USNOIAQV gsasqunu aqueqsuoy 9195 OAUr 0 32 usyueIsuoy I UT USNOIqV
517. stanzvariablen anwendungsabh ngig spezifizierbar Z B kann auf den alten Wert einer IPPLT Scheme http www plt scheme org Zugriff 24 Oct 2009 2 8 KLASSE INSTANZ MODELL 337 Instanzvariablen im Rahmen der Vererbung der Modifikation zugegriffen werden lt gt 104 2 8 2 Vererbung Interfaces Mixins und Traits Schritt fiir Schritt zeigen wir anhand der Klassen Konto Verwahr konto und Offener Vorgang einige M glichkeiten zur Nutzung der Vererbung Zun chst erbt die Klasse Verwahrkonto von ihrer Oberklasse Superclass Konto die Eigenschaften also Slots z B Na me Inhaber und Methoden z B get Name Inhaber eval gt define Verwahrkonto class Konto field Buchungsgrund field Bearbeiter unbekannt define public set Buchungsgrund lambda Text set Buchungsgrund string append Text Buchungsgrund super new eval gt define V001 new Verwahrkonto id 7 name Otto Mustermann get field Name Inhaber V001 gt Otto Mustermann eval gt send V001 get Name Inhaber gt Otto Mustermann eval gt Die bergabe der Werte f r die Intitialisierung der Klasse Konto hier id 7 und name Otto Mustermann kann auch ganz oder teilweise in der Klasse Verwahrkonto3 selbst erfolgen und zwar durch Nennung im super new Konstrukt eval gt define Verwahrkonto class Konto init name Unbekannt field Buchungsgrund field Bearbeiter unbekannt define
518. ste null notwendig falls zirkul re Liste nur aus einer cons Zelle besteht set Zirkulare Liste cdr Zirkul re_Liste ARBEITSPLAN gt 0 0 Zirkulaere_ Liste Element 2 Element 3 Legende Symbole S 165 Programmcode S 170 Abbildung 2 10 Vorgang aus der zirkul ren Liste entfernen 2 2 ABBILDUNGSOPTION LISTE 181 keinen Einfluss auf ein Konstrukt d h k nnen wir seine Implementati on nicht beeinflussen und wollen trotzdem sichergehen dass die cons Zellen des Arguments nicht modifiziert werden dann k nnen wir diese nicht direkt dem fremden Konstrukt bergeben Keine 1 ambda Variable darf direkt an diese cons Zellen gebunden werden Es ist zun chst eine Kopie des Argumentes durch neue cons Zellen zu konstruieren und die se Kopie dient dann als Bindungswert Wird die Kopie ver ndert bleibt das Original erhalten Die Sicherstellung des Argumentes ist damit er reicht Eine solche Kopie ist der R ckgabewert des copy Konstruktes Fall 1 Modifikation der cons Zellen des Argumentes eval gt define Foo A B C D eval gt define Baz Foo Foo ist Argument fur das define Konstrukt eval gt eq Foo Baz gt t Foo und Baz zeigen auf dieselben cons Zellen eval gt set cdr Baz E eval gt Baz gt a e eval gt Foo gt a e Modifikation von Foo Fall 2 Modifikationsschutz durch 1ist copy Konstrukt Hinweis list copy in PLT Scheme D
519. sters ein Stern dann sind folgende F lle zu unterscheiden 5 Klausel 1 Der Stern steht f r ein Element im Pr fling Fall a Der Mu stervergleich ist mit den Restlisten fortzusetzen Ist der Vergleich der Restlisten erfolgreich dann passt das Muster 2 Der Stern steht f r mehrere Elemente im Pr fling Fall b Wir behalten das aktuelle Muster bei d h verk rzen es nicht und vergleichen es mit dem Rest des Pr flings Dadurch ist es beim erneuten Vergleich car Muster wieder der Stern der dann mit dem n chsten Element des Pr flings verglichen wird 2 4 ABBILDUNGSOPTION ZEICHENKETTE UND SYMBOL 241 3 Der Stern steht f r kein Element im Pr fling Fall c Wir verk rzen das Muster so dass wir den Stern aufgeben und ver gleichen das verk rzte Muster mit dem aktuellen Pr fling 4 Die rekursiven Simple Match Anwendungen stehen im cond Konstrukt als Pr dikate F hrt keines zu einem Wert ungleich dann passt das Muster nicht Zur leichteren Erkennbarkeit ist eine entsprechende t Klausel formuliert Fall d 2 4 2 string Konstrukte Beispiel Einfacher Mustervergleich f r Zeichenketten Im bisherigen Simple Match Konstrukt Abschnitt 2 4 1 S 239 sind das Muster und der Pr fling Listen Wir entwickeln daraus ein Simp le Match Konstrukt das mit Zeichenketten arbeitet Statt Symbole in einer Liste zu pr fen sind Teile von Zeichenketten zu pr fen Das obi ge Beispiel ist f r dieses strin
520. string write space n 1 zeigen lambda Baum eingerueckt cond leerer Baum Baum void t zeigen rechter Teilbaum Baum eingerueckt anzahl_ space write space eingerueckt display Baum Key Baum display display Baum Hoehe Baum display newline zeigen linker Teilbaum Baum eingerueckt anzahl_space zeigen Baum anzahl space Auswahl des Benutzerkommandos dispatch function 2 3 ABBILDUNGSOPTION VEKTOR 235 cond eg operation Start set DATEN with input from file car parameter lambda read t eq operation Ende with output to file car parameter lambda write DATEN t AVL Baum DATEN cond eq operation Eingabe set DATEN einfuegen in AVL Baum car parameter cadr parameter DATEN t eq operation Get Text Baum Text get key AVL Baum car parameter DATEN eq operation Get min Key Baum Key get minimum key AVL Baum DATEN eq operation Get max Key Baum Key get maximum key AVL Baum DATEN eq operation Get next Key if string ci car parameter Baum Key get maximum key AVL Baum DATEN begin display Hinweis Eingabe war groesster key car parameter Baum Key get next key AVL Baum car parameter DATEN eq operation Struktur zeigen AVL Baum struktur zeigen DATEN 2 t displa
521. string append 2 7 MODULE LOKALER NAMENSRAUM 321 Heute date gt string seconds gt date current seconds Bevor der Wert des Exportsymbols heute abgefragt werden kann ist unser module Termin zu importieren hier in unsere top level Umge bung und zwar mit dem require Konstrukt eval gt heute gt ERROR eval gt require Termin eval gt heute gt Heute Monday January 4th 2010 eval gt date gt string gt lt procedure date gt string gt Der Namensraum eines Moduls wird besonders gesch tzt und vom Namensraum der normalen Definitionen unterschieden Z B ist der Mu tator set auf heute daher nicht direkt anwendbar eval gt set heute 20100104 gt ERROR set cannot mutate module required identifier in heute Die bernahme von Namen die mit dem provide Konstrukt be reitgestellt werden l sst sich im require Konstrukt einschr nken und zwar mit only in und except in wie das folgende Beispiel zeigt eval gt module Foo scheme provide get A get B define A a define B b define get A lambda A define get B lambda B eval gt module Bar scheme require only in Foo get B cons get B get B eval gt require Bar gt b b eval gt require except in Foo get B eval gt get A gt lt procedure get A gt eval gt get B gt ERROR reference to an identifier before its definition get B F r unsere Kontenverwaltun
522. string ref Foo 12 gt f eval gt char string ref Foo 12 gt t eval gt char Foo gt f Der Wert des string ref Konstruktes ist vom Typ Zeichen d h das Pr dikat char ist erf llt und nicht vom Typ Zeichenkette d h 2 4 ABBILDUNGSOPTION ZEICHENKETTE UND SYMBOL 243 das Pr dikat string wird nicht erf llt Zum Pr fen eines mit dem string ref Konstrukt selektiertem Zeichen auf space k nnen wir daher nicht das Pr dikat string nutzen Es ist mit dem Pr dikat char zu pr fen Wir definieren daher ein Konstrukt space das pr ft ob an einer bestimmten Stelle ein Zwischenraum in der Zeichen kette gegeben ist wie folgt eval gt define space lambda String Position char gt string ref String Position space Analog zu einer Liste bei der zur Trennung der Elemente ein Zwi schenraum ausreicht jedoch beliebig viele Zwischenr ume stehen k n nen fassen wir f r das Selektieren einer Zeichenteilkette ebenfalls be liebig viele Zwischenr ume als ein Trennzeichen auf F r die zu defi nierenden Konstrukte car string und cdr string unterstellen wir folgende Ergebnisse eval gt car string more LISP gt more Keine f hrenden und nachfolgenden Zwischenr ume eval gt cdr string more LISP gt LISP F hrende und nachfolgende Zwischenr ume bleiben erhalten Die Annahme dass mehrere Zwischenr ume als ein Trennzeichen gewertet werden erleichtert da
523. struct Klasse I value I value II eval gt define struct Klasse I Klasse I slot III mutable transparent eval gt define Baz make Klasse I Value 1 value 2 value 3 eval gt Baz gt struct Klasse I value 1 value 2 Value 3 eval gt Klasse I slot III Baz gt value 3 eval gt Klasse I slot III Foo gt ERROR Klasse I slot III expects args of type lt Sstruct Klasse I gt given instance of a different lt struct Klasse I gt s 318 KAPITEL 2 KONSTRUKTIONEN Kein Propagieren der Anderung eval gt Klasse I slot I Foo gt value I Fiir das Propagieren einer solchen Anderung bedarf es der dynami schen Vererbung 2 6 4 Zusammenfassung Zugriffskonstrukte als Schnitt stelle Das define struct Konstrukt generiert den Verbund von Konstruk tor Selektor Pr dikat und Mutator Der Konstruktor make lt structure name gt bildet ein Objekt mit den Feldern engl slots und kann diese mit voreingestellten Werten engl default values initialisiert Ein generierter Selektor besteht aus dem Strukturnamen und dem Feldnamen verbunden durch einen Bindestrich Das Pradikat hat als Na men den Strukturnamen erganzt um ein Fragezeichen am Namensende Ein Feldinhalt einer mit make lt structure name gt gebildeten Struktur ist mit dem set lt structure name gt lt slot gt Konstrukt modifizier bar Das define struct Konstrukt erm glicht eine einfache statische Ver
524. strukt wenn es um den Wahrheitswert false geht Wie dargelegt wird in Scheme die Auswertung von or beim ersten Wert ungleich false beendet das gesamte or Konstrukt hat dann die sen Wert Die Auswertung von and wird beim ersten Wert false be endet das gesamte and Konstrukt hat false als Wert Das and und das or Konstrukt sind damit noch nicht vollst ndig spezifiziert Das and und das or k nnen in einigen LISP Systemen z B in Scheme auch ohne Argument angewendet werden Das and ohne Argument gibt den Wert t zur ck weil kein Argument als kein falsches Argument interpretiert wird Das or ohne Argument f hrt zu da kein Argument als kein wahres Argument interpretiert wird eval gt and gt t eval gt or gt f Man k nnte spontan mit and Konstrukten die obige begrenzte Ein treffer Entscheidungstabelle Tabelle 1 14 S 82 nach der Regel f r Regel Programmierung folgenderma en notieren eval gt define ET Auszahlung buchen lambda cond Regel 1 and B1 B2 B4 A5 Regel 2 and B1 B2 B3 not B4 A1 Regel 3 1 2 KOMBINIEREN VON KONSTRUKTEN 87 and B1 B2 not B3 not B4 A3 A5 Regel 4 and B1 not B2 A4 Regel 5 and not B1 B3 A2 Regel 6 and not Bl1 not B3 B4 A3 A5 Regel 7 and not B1 not B3 not B4 A1 Die M ngel dieser Regel f r Regel Programmierung sind
525. t Konstrukte zum Fortschreiben von AUSSAGEN vgl E1 7 Ergaenzung AUSSAGEN lambda neue Aussage set AUSSAGEN cons neue Aussage AUSSAGEN Modifikation AUSSAGEN lambda alte Aussage neue Aussage set car alte Aussage neue Aussage Effizientes Suchen durch zweistufiges Verfahren Get Wert in AUSSAGEN lambda Objekt Eigenschaft do fakt assoc Objekt AUSSAGEN assoc Objekt cdr fakt or eq fakt f eq Get Eigenschaft fakt Eigenschaft 3 1 TRANSPARENZ DER DOKUMENTATION 401 if eq fakt f af Get Wert fakt Aussage in AUSSAGEN lambda aktion let bisheriger Wert Get Wert in AUSSAGEN Get Objekt aktion Get Eigenschaft aktion cond or null bisheriger Wert eq bisheriger Wert Ergaenzung AUSSAGEN aktion t Modifikation AUSSAGEN bisheriger Wert ake Lom Wert beim Benutzer nachfragen vgl E1 6 benutzerschnittstelle Voraussetzung f r eine Benutzernachfrage nicht ableiten lambda Eigenschaft getprop Eigenschaft nachfragen benutzer rueckfrage lambda Objekt Eigenschaft display Nenne display Eigenschaft display von display Objekt display Ergaenzung AUSSAGEN Make Aussage Objekt Eigenschaft bead 777Regelauswahl Bedingungen testen i77 neues Ziel bilden test b_n Bedingungen plural lambda b_n cond null
526. t die Struktur zu einer nicht linearen Struktur In den beiden folgenden Beispielen wird die Situations nderung f r die Bedingungspr fung ber Zufallszahlen bewirkt Das random Kon strukt gibt als Wert Pseudozufallszahlen zur ck und zwar in dem Werte bereich von Null bis Wert des Argumentes minus 1 eval gt random 5 gt 3 0 lt Pseudozufallszahl lt 5 Beispiele Bedingte Schleifen while until Konstrukte eval gt define Block lambda print Block verarbeitet newline eval gt define Wiederholungs Bedingung lambda lt random 5 3 eval gt define Abbruch Bedingung lambda not Wiederholungs Bedingung eval gt define While Beispiel lambda do p Bedingung 1 2 KOMBINIEREN VON KONSTRUKTEN 99 do Initialisierung Wiederholungs Bedingung do Iterationswert wiederholungs Bedingung not p do Exit Bedingung Block eval gt While Beispiel gt Block verarbeitet Block verarbeitet eval gt While Beispiel gt Block verarbeitet Block verarbeitet Block verarbeitet Block verarbeitet eval gt define Until Beispiel lambda do q Um Block zumindest einmal abzuarbeiten Abbruch Bedingung q do Exit Bedingung Block eval gt Until Beispiel gt Block verarbeitet eval gt Until Beispiel gt Block verarbeitet Block verarbeitet eval gt set Wiederholungs Bedingung lambda ev
527. t gt E5 4 Anzeigen Akte Aktenverwaltung Get text lt key gt E5 5 Kleinste Aktenzeichen Aktenverwaltung Get min Key E5 6 Gr te Aktenzeichen Aktenverwaltung Get max Key E5 7 N chstes Aktenzeichen Aktenverwaltung Get next Key E5 7 Bestand an Aktenzeichen als AVL Baum zeigen Aktenverwaltung Struktur zeigen T1 Beispiel T1 1 Aktenbestand eval gt begin Aktenverwaltung Eingabe L a 2 Fall Meyer Aktenverwaltung Eingabe L a 2 b Fortsetzung Meyer Aktenverwaltung Eingabe G b 3 2 Plan Westfeld Aktenverwaltung Eingabe Y 345 6 Fall Schulze Aktenverwaltung Eingabe Dortmund Stadtplanung Aktenverwaltung Eingabe Herbert Fall Herbert Aktenverwaltung Eingabe A 1 122 Rechnerbeschaffung Aktenverwaltung Eingabe G b 3 2 Plan Neu Westfeld 2 3 ABBILDUNGSOPTION VEKTOR 229 Aktenverwaltung Ende D bonin scheme AVL DAT T1 2 Erzeugter AVL Baum lt key gt lt hdhe gt eval gt Aktenverwaltung Struktur zeigen gt Y 345 6 1 L a 2 b 2 L a 2 4 Herbert 1 G b 3 2 3 Dortmund 2 A 1 122 1 Programm Aktenverwaltung define Aktenverwaltung lambda operation parameter letrec Konstruktoren Selektoren und Pradikate Make Baum lambda Hoehe Key Text linker Teil rechter Teil vector Hoehe Key Text linker Teil rechter Teil AVL Baum lambda Baum cond leerer Ba
528. t gt Abschnitt 3 4 1 S 438 3 1 Transparenz der Dokumentation Konstruieren hei t dokumentieren Das Ergebnis dieser T tigkeit die Konstruktion ist ebenfalls ein Dokument Softwarekonstruktion bedeu tet eine vorgegebene Kette von Dokumenten zu produzieren Das Ko stenbudget und die Terminvorgaben bedingen dass wir diese dominie rende Aufgabe nicht missinterpretieren Je mehr Dokumente produziert werden umso besser H ufig gibt es zu viele unn tze nicht zweckorien tierte Dokumente gt z B 163 S 205 Bei der Dokumentation geht es nicht um die Menge sondern um die Qualit t d h um die Transparenz in Bezug auf ein schnelles und hinreichend genaues Verstehen der Konstruktion Die popul re Dokumentationsstrategie orientiert sich an der Maxi me Erst Entwurf dann Reinschrift Damit ist Dokumentieren stets eine nachtr gliche Arbeit Die Dokumentation die erst nach vollbrachter Tat 27 B SLAN 4 10 374 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN d h nach Abschluss der eigentlichen Konstruktion entsteht vergeudet Zeit und ist fast nutzlos Zu solchen Nacharbeiten zahlen insbesondere z B 153 S 140 1 die verbale Beschreibung der Kontrollstruktur 2 Programmablaufpl ne PAP s und 3 das Einf gen von Kommentaren Ab einer gewissen Komplexit t der Konstruktionsaufgabe sind 1 vorbereitende Dokumente Lastenheft Pflichtenheft Begr ndun gen f r das gew hlte Konzept etc 2 Konst
529. t lt wert gt gt lt wert gt eval gt remprop lt symbol gt lt eigenschaft gt gt lt symbol p liste gt Selektoren Eingeschr nkte Verf gbarkeit in PLT Scheme eval gt proplist lt symbol gt gt lt p liste gt ganze P Liste eval gt getprop lt symbol gt lt eigenschaft gt gt lt wert gt Pr dikat eval gt pair lt p liste gt gt t mit 7Das remprop Konstrukt ist nicht im Module compat mzscheme enthalten Ein Ersatz l sst sich aber wie folgt definieren define remprop lambda Symbol Key putprop Symbol Key f Die Reihenfolge von lt wert gt und lt eigenschaft gt ist oft unterschiedlich implemen tiert Das proplist Konstrukt ist nicht im Module compat mzscheme enthalten 2 2 ABBILDUNGSOPTION LISTE 193 lt symbol gt Das Symbol dessen Eigenschaftsliste betroffen ist lt wert gt Beliebiger symbolischer Ausdruck als Aus pragung der Eigenschaft lt eigenschaft gt Ein Symbol das die Eigenschaft von lt symbol gt benennt lt p lite gt Eine Liste mit der Elementfolge aus lt eigenschaft gt und lt wer gt sortiert in der umgekehrten Reihenfolge der putprop Applikationen lt symbol p liste gt Modifizierte lt p liste gt mit lt symbol gt als zus tzliches erstes Element Die Konstrukte putprop getprop remprop und proplist eva luieren ihre Argumente so dass an der Stelle von lt symbo
530. t Struktur Ersatz not pair Struktur struktur t cons Ersetzung Objekt Ersatz car Struktur Ersetzung Objekt Ersatz cdr Struktur eval gt Ersetzung Wohnplatz Wohnsitz BGB 7 124 KAPITEL 1 KONSTRUKTE Ja lt FO gt Nein oe Nein Ja lt F gt 2 gt Nein ioe lt F3 gt ee Ja__ lt pqg gt Nein lt F5 gt S1 S2 Legende FO Fl F2 Fragen SO S1 S2 Systemantworten Abbildung 1 24 Skizze eines Bin rbaumes gt 1 Wer sich an einem Wohnsitz 2 Der Wohnsitz bestehen 3 Der Wohnsitz aufzugeben 1 3 3 Rekursive Konstrukte f r rekursive Strukturen Die Rekursion ist die geborene L sungsmethode f r die Handhabung von Baumstrukturen Im Allgemeinen sind Operationen die sich auf einen Baum beziehen wiederum auf dessen Teilb ume anzuwenden und zwar so lange bis die Baumbl tter erreicht werden Anhand eines sim plen Beratungssystems wird deutlich dass die rekursive L sungsmethode zweckm ig f r Baumstrukturen ist Beispiel Ja Nein Navigation entlang einer Baumstruktur Zu definieren sei ein Beratungssystem das auf seine Fragen als Dialog eingabe Ja oder Nein erwartet Die Fragen sind hierarchisch struktu riert Abbildung 1 24 S 124 Das Beratungssystem basiert auf der rekursiven Struktur lt frage gt lt ja baum gt lt nein baum gt Der lt ja baum gt und der lt nein baum gt haben beide wiede
531. t definiert Ihr Wert ist undefiniert so wie es der Wert bei der Division einer Zahl durch O ist Abh ngig von der jeweiligen LISP Implementation wird jedoch null bzw NIL oder eine Fehlermeldung oder ein sonstiges Zeichen zuruckgegeben In PLT Scheme DrScheme haben die Selektoren dann folgende Werte eval gt car gt ERROR eval gt cdr gt ERROR eval gt car gt ERROR eval gt cdr gt ERROR eval gt car gt quote eval gt cdr gt Konstruktor cons Wahrend die beiden Selektoren car und cdr eine Liste in zwei Teile zerlegen verbindet der Konstruktor cons to construct zwei symboli sche Ausdr cke Das cons Konstrukt hat eine Schnittstelle f r zwei Ar gumente Es hat als Wert eine neue Liste wenn das zweite Argument eine Liste ist Der Wert ist die neue Liste mit dem Wert des ersten Argu ments als erstes Element dieser Liste Kurz formuliert cons f gt einen symbolischen Ausdruck als Kopf an den Anfang einer Liste H ufige engl LISP Phrase Ill cons something up Beispiele zum cons Konstrukt eval gt cons Leuphana Universit t L neburg gt Leuphana Universitat Luneburg eval gt cons 1 2 3 gt 1 2 3 eval gt cons 1 list gt 1 Ist der Wert des zweiten Arguments keine Liste dann hat das cons Konstrukt ein sogenanntes Punkt Paar engl dotted pair als Wert wo bei der linke Teil der Wert des ersten Argumentes
532. t sich in den Schwanz Wir nutzen die zirkul re Liste im Beispiel Verwalten von 2 2 ABBILDUNGSOPTION LISTE 161 cdr Legende CD Wertebereich O Operation Abbildung 2 2 Signatur einer endlichen nicht zirkularen Liste Arbeitsvorgangen lt gt Abschnitt 2 2 1 S 166 Dabei unterstellen wir einen Manager der f r gr ere Arbeiten eine Bearbeitsungsreihenfol ge festlegt Zur Wiederholung der bisher verwendeten Listen Konstrukte zeigen wir die Losung zunachst ohne Listen Mutatoren Mit destruktiven Listenveranderungen definieren wir anschlie end die L sung abgebil det als zirkul re Liste Zur Konstruktion einer zirkul ren Liste wird eine schon existieren de Liste modifiziert Zum leichteren Verstehen dieser Listen Mutatoren befassen wir uns mit cons Zellen Skizzen Abschnitt 1 2 1 S 52 Ab bildung 1 15 S 60 Mit diesen cons Zellen Strukturen sind keinesfalls alle realisierten Implementationen einer Liste beschrieben z B LISP Maschinen Abschnitt A 1 S 460 Eine bliche Abweichung ist die Reihenfolge von car und cdr Teil Weil die Applikation des cdr Kon struktes h ufiger vorkommt als die des car Konstruktes stellen z B in einer cons Zelle von 8 Byte L nge die ersten vier Bytes den cdr Teil dar Die Assoziationsliste kurz A Liste behandeln wir anhand der De finition eines Kontos Abschnitt 2 2 2 S 183 Die Eigenschaftsliste engl property list kurz P Liste wird
533. t sind N heres zu Makros Abschnitt 2 5 3 S 293 Das case Konstrukt hei t deshalb konsequenterweise bei einigen LISP Systemen SELECTO z B in TLC LISP wobei Q f r QUOTE steht 1 2 KOMBINIEREN VON KONSTRUKTEN 89 PC Scheme eval gt EXPAND MACRO case read J Ja 1 2 else 3 4 gt lambda 00000 if memv 00000 J Ja Das memv Konstrukt begin 1 2 pr ft ob der Wert von begin 3 4 lt 00000 Element der read Liste J Ja ist PC Scheme eval gt EXPAND MACRO cond eq J read 1 2 t 3 4 gt if eq J read begin 1 2 cond t 3 4 Iteration Eine Iteration auch Repetition genannt erm glicht das wiederholte Durchlaufen bzw Anwenden eines Konstruktes Die Abbildung 1 18 S 90 zeigt die grafische Darstellung einer Iteration in Jackson Notation 98 Der Modul Gesamt besteht aus einer beliebig langen Folge von Moduln wiederholungs Teil daher notiert mit einem Stern Ab bildung 1 18 S 90 Dabei ist zu beachten 1 Gesamt ist die Iteration und 2 die H ufigkeit des Auftretens von Wiederholungs Teil ist eine Eigenschaft von Gesamt und nicht von Wiederholungs Teil Der Stern in der rechten oberen Ecke dokumentiert das mehrfache Auf treten von Wiederholungs Teil innerhalb von Gesamt Eine Itera tion wird beendet 1 entweder durch Zutreffen einer Abbruchbedingung wobei die Er eignispr fung vor oder nach einem Durchlauf erfolgen
534. t wurde konnten die Terminals z B einfache Kartenleser und Drucker nur mit Gro buch staben umgehen Als Terminals mit Kleinbuchstaben auf den Markt ka men wurden Betriebssysteme und Programmiersprachen zun chst nur leicht modifiziert Sie setzten die Kleinbuchstaben in Gro buchstaben um und konnten damit die Verarbeitung wie bisher durchf hren Heute ist bei modernen LISP Systemen so auch bei PLT Scheme DrScheme diese Konvertierung standardm ig ausgeschaltet Die externe Repr sentation eines Symbols ergibt sich aus der Zei chenfolge im Slot PRINT name Dort wollen wir m glichst alle be 2 4 ABBILDUNGSOPTION ZEICHENKETTE UND SYMBOL 249 PRINT name Package cell Legende Dargestellt sind die Elementarteilchen bei einem Common LISP System Das Scheme Konzept verzichtet bewusst auf die Function cell und gewinnt dadurch an Stringenz PRINT name Identifizierungs Element des Symbols Value cell Speicher fur den Zeiger auf den Symbolwert Funtion cell Speicher ftir den Zeiger auf den Funktionswert eines Symbols P List Speicher f r den Zeiger auf die Eigenschaftsliste Pro perty List Abschnitt 2 2 3 S 191 Package cell Speicher f r den Zeiger auf die Zuordnung zu einer eigenen Symbolsammlung z B System Benutzer Editor etc Abbildung 2 20 Elementarteilchen eines Symbols Literalatoms liebigen Zeichen ablegen k nnen z B auch Sonderzeichen wie Leerzei chen ffnende oder
535. tanz der Klasse Foo assoziiert ist Dabei kann eine Bandbreite durch den Mini und den Maximumwert angegeben werden Eine Assoziation wird in der Regel so implementiert dass die betei ligten Klassen zus tzlich entsprechende Referenzslots bekommen Wir nehmen beispielhaft die Aussage an Ein Unternehmen besch ftigt viele Mitarbeiter Die Klasse Unternehmen enth lt dann den Slot arbeit nehmer und die Klasse Mitarbeiter den Slot arbeitgeber Auf grund der angebenen Multiplizit t hier sei m viele Mitarbeiter muss der Slot arbeitnehmer mehrere Werte aufnehmen d h einer Beh lterklasse entsprechen Ein Set Menge ohne Duplizit t oder ein Bag Menge mit Duplizit t sind beispielsweise bliche Beh lter klassen In der Regel wird dann der jeweilige Rollenname hier rolle f r den Referenzslot verwendet Soll eine Assoziation eine Bedingung erf llen dann ist diese in Form der Zusicherung zusicherung neben der Assoziationslinie zu no tieren Fine Zusicherung kann auch die referenzielle Integrit t beschrei ben Z B k nnten hierzu beim L schen angebenen werden e prohibit deletion 17 beziehungsweise assoziiert sein kann 3 3 NOTATION MIT UML 429 Das L schen eines Objektes ist nur erlaubt wenn keine Beziehung zu einem anderen Objekt besteht e delete link Wenn ein Objekt geloscht wird dann wird nur die Beziehung zwi schen den Objekten gel scht e delete related object
536. tation zur ck F r unsere Kontenverwaltung ben tigen wir wie im Fall der defi ne struct L sung Abschnitt 2 6 1 S 306 wieder die Pr dikate Betrag und Buchungsdatum 332 KAPITEL 2 KONSTRUKTIONEN eval gt define Betrag lambda X and number X gt X 0 eval gt define Buchungsdatum lambda X and number X gt X 100101 Selektor Die mit define public deklarierten Methoden in einer Klasse hier Konto werden von ausserhalb der Klasse mit dem send Konstrukt unter Angabe einer Instanz hier z B A001 dieser Klasse ap pliziert und zwar so wie ein Scheme bliches 1ambda Konstrukt eval gt send lt object expr gt lt method id gt lt argument gt mit lt object expr gt Evaluiert zu einem Objekt lt method id gt Externer Name der Mehode lt argument gt Argument f r die Applikation der Methode falls erforderlich Damit kann z B die Methode get Name Inhaber wie folgt selek tiert und angewendet werden eval gt define A001 new Konto id 1 name Hinrich Bonin eval gt send A001 get Name Inhaber s Hinrich Bonin Auch auf einen Slot lasst sich von ausserhalb der Klasse zugreifen wenn er nicht als private field mit dem define Konstrukt deklariert wur de Dazu dient das get ield Konstrukt eval gt get field lt field id gt lt object expr gt mit lt field id gt Name des Feldes Slots lt object
537. ter dem Pr dikat parame ter und weiteren Konstrukten k nnen wir eigene Parameter definieren und nutzen Erfreulicherweise fragen einige primitive Konstrukte wie z B das eval Konstrukt bestimmte Parameter ab Das folgende Beispiel skiz ziert einen solche Parametrisierung N heres lt gt PLT Scheme Online Doku mentation eval gt make parameter gt lt procedure make parameter gt eval gt make parameter 1 gt lt procedure parameter procedure gt eval gt parameter current namespace gt Te 2 9 KOMMUNIKATION 367 eval gt define Foo top level eval gt let ns make base namespace parameterize current namespace ns 7im Namespace ns wegen Parameter abfrage von eval eval define Foo let level newline display eval Foo display Foo gt let level top level Exkurs Custodian Verwalter Aufpasser In PLT Scheme bernimmt das Verwalten einer Sammlung von Threads File Stream Ports TCP Ports TCP Listeners UDP Sockets und byte con verters ein Custodian Immer wenn z B ein Thread keriert wird kommt er unter die Verwaltung des current custodian Jeder custodian Ausnah me root custodian wird selbst durch einen custodian verwaltet so das die custodians eine Hierarchie bilden Dem Programmierer stehen mit den entsprechenden Konstrukten vielfalti ge Steuerungsoptionen f r Threads zur Verf gung wie die folgenden Zei len andeuten eval
538. testet ob eine V cons Zelle vorliegt bzw mehrere Da nicht jeder Vektor vom Typ V cons ist berpr ft V pair auch die L nge des Vektors Wir unterstellen damit dass jeder zweielementige Vektor eine V cons Zelle ist eval gt define V pair lambda V_Pair and vector V_Pair vector length V_Pair 2 Die Mutatoren V set car und V set cdr sind mit dem einge bauten Mutator vector set leicht realisierbar eval gt define V set car lambda V_ Pair car Teil vector set V Pair 0 car Teil eval gt define V set cdr lambda V_ Pair cdr Teil vector seu V Pair 1 cdr Teil 2 3 ABBILDUNGSOPTION VEKTOR 221 Unser Verbund von Konstruktor V cons Selektoren V car und V cdr sowie Pr dikat V null hat die wesentliche Eigenschaft Das Zu sammengef gte kann ohne Verlust wieder getrennt werden eval gt V car V cons X Y gt X eval gt V cdr V cons X Y gt Y eval gt V null V car V cons V NULL Y gt t eval gt V null V cdr V cons X V NULL gt t eval gt define Foo V cons X Y eval gt Foo gt X Y Der Wert von Foo verr t dass unsere V cons Zellen als Vekto ren abgebildet sind Wir definieren ein geeignetes V pp Konstrukt um auch nach au en hin das gewohnte Layout einer Listen Darstellung ver mitteln zu k nnen eval gt define V pp lambda V_ Pair letrec V atom lambda Objekt not V pair Objekt Ausgabe l
539. tionale Zahl Beispiel f r die Definition einer Funktion Es ist eine Funktion Abbuchen zu definieren die von einem Konto einen Betrag abbucht Um den Vorgang leicht verstehen zu k nnen sind einige Zwischenschritte angebracht Als ersten Schritt formulieren wir folgen des lambda Konstrukt eval gt lambda Schnittstelle Alter Saldo Abbuchungsbetrag Rechenvorschrift Alter Saldo Abbuchungsbetrag gt lt procedure gt Die Schnittstelle hat die beiden formalen Parameter Alter Saldo und Abbuchungsbetrag Die Rechenvorschrift besteht nur aus der Subtraktionsfunktion so dass wir eine Zahl als R ckgabe Wert erwar ten wenn die entstandene Funktion angewendet wird Wegen der Pr fix Notation bestimmt das erste Element einer Liste den anzuwendenden Programmcode Beispielsweise benennt das Sym bol Bindestrich das Funktionsobjekt den Programmcode f r die Subtraktion Ermittelt man den Wert vom Symbol Bindestrich gem EVAL Regel 4 Abschnitt 1 1 2 S 20 dann erh lt man das Funkti onsobjekt und kann es auf die Werte seiner Argumente anwenden Ent sprechend ist das Lambda Konstrukt als erstes Element einer Liste zu notieren Die restlichen Listenelemente sind die Argumente auf die das durch Evaluierung erzeugte Funktionsobjekt angewendet wird Anwendung Applikation des 1ambda Konstruktes eval gt lambda lt schnittstelle gt lt rechenvorschrift gt lt arg gt lt argy gt
540. tive Modell Zweidimensionale Matrix gt Zweidimensionale Matrix konstruiert j als A Liste Mit Hilfe von Mutatoren wird die lokale Matrix fortgeschrieben Ein Element wird mit dem assoc Konstrukt selektiert Genutzte Sprache Scheme R5RS eval gt define Make x y Speicher lambda let Matrix list MATRIX Selektor f r ein Matrixelement get lambda x y let Zeile assoc x cdr Matrix cond not pair Zeile list t let Spalte 213 assoc y cdr Zeile cond not pair Spalte Chie ft cdr Spalte IIII9 Konstruktor Mutator f r ein Matrixelement put lambda x y Wert let Zeile assoc x cdr Matrix cond not pair Zeile set cdr Matrix cons list x cons y Wert cdr Matrix t let Spalte assoc y 214 eval gt eval gt eval gt eval gt eval gt eval gt eval gt eval gt eval gt eval gt eval gt eval gt KAPITEL 2 KONSTRUKTIONEN cdr Zeile cond not pair Spalte set cdr Zeile cons cons y Wert cdr Zeile t set cdr Spalte Wert Matrix Verzweigungsfunktion zum Selektieren der Jeweiligen Operation Dispatch lambda op cond eq op get get eq op put put t display Unbekannte Operation op R ckgabewert ist die Verzweigungsfunktion Dispatch define x y Matrix Make
541. tles eval gt Iteration define n Eck lambda n 1 do i 0 i 1 i n turn 360 n draw 1 eval gt Iteration innerhalb einer Iteration define mn Eck lambda n 1 do i 0 i 1 i n turn 7 360 n n Eck n 1 eval gt Grafik Fenster turtles gt struct object canvas eval gt mn Eck 50 20 Hilbert Kurve gt Legende Ergebnis Abbildung 1 19 S 95 Turtle Grafik Abschnitt A 3 2 S 475 Tabelle 1 16 Programm nm Eck 98 KAPITEL 1 KONSTRUKTE Gesamt Gesamt Wiederholungs Bedingung p Wiederholungs Teil Wiederholungs Teil Abbruch Bedingung q Wiederholung mit voraus Wiederholung mit nachfol gehender Bedingungsprufung gender Bedingungsprufung kurz while Konstrukt kurz until Konstrukt Notiert in einem Pseudocode while p do B od do B until q od Legende Grafische Darstellung nach DIN 66261 52 auch als Struktogramm oder Nassi Shneiderman Diagram bezeichnet lt gt 138 Abbildung 1 20 Bedingte Schleifen Exkurs Lineare Struktur Die Bezeichnung Lineare Struktur wird primar im imperativ gepr gten Paradigma S 141 verwendet Da besteht eine lineare Kontroll Struktur aus Bausteinen die nur einen Eingang und einen Ausgang f r den Kontrollfluss bzw Datenfluss haben Beispielsweise macht ein Baustein der mehrere Konstrukte in der Art von break oder exit aufweis
542. trukte Als Benutzer k nnen wir es der Klasse spezielle Konstrukte zuordnen weil es seine Argumente nach einer speziellen Vorschrift eva luiert Aus der Aufgabensicht f llt es in die Klasse Steuerungskonstruk te weil es einen Wiederholungsprozess Iteration steuert Aus der Im plementationssicht ist es oft ein Makro das zu einem letrec Konstrukt expandiert Jede Konstruktion ist gepr gt von den Vorstellungen die der Chef Konstrukteur hat wenn er ber die Ausf hrung durch einen Rechner nachdenkt F r sein Ausf hrungsmodell sind spezifische Konstrukte Ver kn pfungen L sungsans tze und Vorgehensweisen charakteristisch Ein Modell orientiert sich an beispielhaften besonders gelungenen Konstruk tionen Sie bilden den Rahmen in dem der Konstrukteur seine L sungen sucht notiert und bewertet Ein derartiger Denkrahmen wird als Programmierparadigma oder kurz als Paradigma Denkmodell bezeichnet Man k nnte weni IPLT Scheme http www plt scheme org Zugriff 24 Oct 2009 Ein Paradigma ist ein von der wissenschaftlichen Fach welt als Grundlage der weiteren Arbeiten anerkanntes Erkl rungs modell eine forschungsleitende Theorie Es entsteht weil es bei der L sung von als 142 Analyseaspekt Ersteller des Konstruktes Abarbeitung durch das LISP System Leistungsumfang Verwendungsfehlerrisiko Reichweite Aufgabe Ablauf KAPITEL 2 KONSTRUKTIONEN Klassifikation fur Konstrukt
543. trukte ist eine Sequenz mit n Elementen abbildbar Eine Sequenz mit drei Elementen ist dann wie folgt zu notieren eval gt lambda DUMMY lambda DUMMY lt sexpr3 gt lt sexpr2 gt lt sexpr gt gt lt valuesexpr3 gt eval gt lambda DUMMY lambda DUMMY 3 2 1 gt 3 78 KAPITEL 1 KONSTRUKTE Im Zusammenhang mit dem begin Konstrukt ist das begin0O Kon strukt zu nennen Es wertet seine Argumente der Reihe nach aus und gibt als Ruckgabewert den Wert des ersten Argumentes zur ck Da die Z hlung der Argumente intern blicherweise mit Null beginnt wurde an den Namen begin einfach eine Null geh ngt eval gt beginO lt sexpr gt lt sexprn gt gt lt valuesexpr gt Das begino Konstrukt l sst sich als syntaktische Vereinfachung von fol gendem let Konstrukt auffassen eval gt begin0O lt sexpro gt lt sexXpn gt gt lt valuesexpr gt entspricht eval gt let x lt sexpro gt y lambda lt sexpr gt lt sexpry gt begin y x gt lt valuesexpr gt Hinweis Implementation des beginO Konstruktes Das begin0 Konstrukt ist h ufig als Makro Konstrukt realisiert Der be gino Makro f hrt zu einem 1 ambda Konstrukt mit einem vom LISP System generierten Symbol als 1 ambda Variable PC Scheme eval gt EXPAND MACRO begin0 Teil 1 Teil 2 Teil 3 gt lambda 00000 begin quote Teil 2 quote Teil 3 2000007
544. truktion x Datenrep sentation Mittlere lt 10 000 x Projektplanung Konstruktion x Projekt berwachung f r den gesamten Lebenszyklus x Anforderungsanalyse Requirements Engineering x plus 1 Gro e lt 100 000 x Durchf hrbarkeitsstudie Konstruktion x Definition von Datennetzen und Datenbankmanagement x Konfigurationsmanagement x plus 2 Sehr gro e gt 100 000 x Softwareevolution Konstruktion x Hardwareevolution noch gr er x Dynamik der Anforderungen zerfallen x plus 3 in eigen standige Teile Legende LOC Umfang der Quellcodetexte Lines of Code MJ Manpower Jahre Tabelle 3 10 Konstruktions Kategorien und Arbeitstechniken 3 2 SPEZIFIKATION MIT LISP 407 power Jahren kurz MJ ist umstritten und berechtigt kritisierbar The Mythical Man Month 30 Hier dienen die LOC und MJ Werte nur zur ganz groben Unterscheidung ob ein kleines oder gro es Team die Aufgabe bew ltigen kann Bei einer gr eren Anzahl von Programmie rern ist eine g ere Regelungsdichte erforderlich Die Dokumentations richtlinien die Arbeitsteilung und die Vollzugskontrollen sind entspre chend detailliert zu regeln Es bedarf einer umfassenden Planung und berwachung des gesamten Lebenszyklus Abbildung 1 13 S 51 Im folgenden behandeln wir funktionale Anforderungen bei einem Vollzugsproblem und unterstellen eine kleine bis mittlere Konstruktions gr e so dass wir z B auf Angaben zum Konfigurationsmana
545. tsfunktion wird im Slide aufgerufen define lambda n cond n 0 1 Gee 1 m 1 a TD Deutsches Datum mit Uhrzeit define Datum lambda date display format german date gt string 3 4 PRASENTATION SLIDESHOW 441 seconds gt date current seconds t Mein Normalfont define font40nmb make object font 40 modern normal bold Initialisierung eines Slide Z hlers define Slide Anzahl 0 Titel mit Datum Uhrzeit und Logo define myTitle lambda set Slide Anzahl Slide Anzahl 1 hc append 100 blank 30 10 text Pl doyer f r LISt Processing null 30 0 hc append 10 text string append Slide number gt string Slide Anzahl null 20 0 text Datum null 20 0 bitmap build path D bonin scheme image hegb gif slide title myTitle text LISP Daten LISP Programm font40nmb 10 0 next text LISP Programm LISP Daten font40nmb 10 0 next text Folge Machtiges Werkzeug font40nmb 10 0 next colorize text erfordert Experten null 60 0 3 red slide title myTitle para Programmieren ist ein systematischer disziplinierter Konstruktionsvorgang next para LISP passt zu allen Phasen des Konstruktionsvorganges next para LISP erleichtert die 442 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Bewaltigung komplexer Aufgaben und ist pradestiniert fur den Umgang mit Symbolen slide title
546. tuellen Bindungen macht den Conti nuation Mechanismus zu einer n tzlichen Kontrollstruktur Das einfache Heraus und Hereinspringen in eine Folge von Anweisungen erm glicht ein GO TO Konstrukt das viele Programmiersprachen bereitstellen Da von zu unterscheiden ist der R cksprung mit einer Aktivierung einer eingefrorenen vormals aktuellen Umgebung Wir verdeutlichen diese Eigenschaft des call cc Konstruktes an hand des folgenden Beispiels Es pr ft ob in einer Liste von Zahlen eine negative Zahl vorkommt Zur Iteration ber die Liste nutzen wir das map Konstrukt Zur Vereinfachung der Ausgabe definieren wir Dis playLln f r Display Line eval gt define DisplayLn lambda x display x newline eval gt map lambda x if gt 0 x begin DisplayLn x t f 1 2 3 4 5 gt 3 5 HE t t Dieses map Konstrukt notieren wir in geschachtelte 1 ambda Konstruk te um Bindungswert innerhalb und au erhalb des map Konstruktes zei gen zu k nnen eval gt define Foo lambda n let Var n set Var 2 n lambda L map lambda x if gt 0 X begin DisplayLn x t f L DisplayLn Map Vollzug DisplayLn 2 5 ABBILDUNGSOPTION FUNKTION MIT UMGEBUNG 289 2 Schritt mit Bindungen display Aussen display Var display Innen DisplayLn L DisplayLn n Schrace eval gt Foo 6 1 2 3 4 5 3 5 Map Vollzug 2 Schritt mit Bindungen
547. tung Nicht verwechseln mit dem eval Konstrukt Die Priorit t ergibt sich aufgrund einer Entfernungssch tzung vom Start zum Ziel bei dem Weg ber den jeweiligen Knoten Den zur ckge legten Weg vom Start bis zum Knoten merken wir uns in der P Liste des Knotens unter der Eigenschaft Entfernung vom Start Addieren wir zu diesem Wert eine Sch tzung vom Knoten zum Ziel dann haben wir einen Sch tzwert f r die Gesamtentfernung die wir unter der Eigen schaft Schaetzung Gesamtentfernung speichern Wird die Lis te eroeffnete Knotennach den Werten von Schaet zung Gesamt entfernung sortiert dann ist ihr erster Knoten die beste Wahl weil er den k rzesten Gesamtweg verspricht Das Problem liegt im Berechnen eines geeigneten Sch tzwertes Auf keinen Fall darf der Sch tzwert gr er sein als die tats chliche Entfer nung zwischen dem Knoten und dem Ziel Zul ssigkeitsbedingung f r das A Verfahren Andernfalls w re nicht sichergestellt dass der erste Knoten von Liste eroeffnete Knoten die h chste Priorit t hat Es k nnte dann ein Knoten mit h herem Sch tzwert letztlich eine k rzere Entfernung repr sentieren als der vermeintlich beste Knoten Nehmen wir zur Erf llung dieser Bedingung als extremen Sch tzwert stets O an dann entspricht das A Verfahren einem uninformierten Ver fahren mit der Konsequenz dass wir viele Knoten expandieren m ssen Ein geeigneter Sch tzwert ist die Differenz der x Koordinatenwerte Abbildung 2
548. tur Die Liste selbst und jedes Element stellen einen sogenannten symbolischen Ausdruck dar engl symbolic expression ab gek rzt S Expression oder k rzer sexpr Plural sexprs Ein symbolischer Ausdruck symbolic expression kann sein 3Hinweis In PLT Scheme DrScheme ist NIL bzw nil wie folgt zu definieren eval gt define nil list eval gt nil gt 16 KAPITEL 1 KONSTRUKTE Schritte null leere Liste angelegt Element C eingef gt Element B vorn eingef gt Element A vorn eingef gt Liste E F G andie Stelle von A gesetzt Element A vorn eingef gt Legende Klassisch wird die leere Liste mit NIL statt mit null angegeben Tabelle 1 1 Beispiel Von der leeren zu einer geschachtelten Liste Konstrukte sind symbolische Ausdr cke Konstrukt TYP Elementare LISP Konstrukte aus Benutzersicht Symbol Zahl Zeichen Zeichen Liste kette Konstrukt Repr sentation Elementare LISP Konstrukte aus Implementationssicht Realisierung abh ngig vom jeweiligen LISP System Legende Betrachtungsebene Verstehen der elementaren Konstrukte ohne Implementations Detailkenntnisse Abbildung 1 3 Symbolische Ausdr cke 1 1 EINFUHRUNG HANDHABUNG VON KONSTRUKTEN 17 1 ein Symbol auch Literalatom genannt Z B A oder null oder Meyer AG notiert als ein Buchstabe oder Sonderzeichen gefolgt von keinem oder weiteren Buchstaben oder Sonderzeichen 2 eine Zahl
549. twort Nein eg Antwort Ja t An der Stelle des Pradikates einer Klausel steht nicht eine Funktions anwendung also eine Liste sondern ein Symbol hier eq Da das Symbol eq als eingebaute Funktion einen Wert ungleich f hat trifft stets die 1 Klausel zu Der Wert ihres letzten symbolischen Ausdruckes ist Nein Der Wert von MURKS 7 ist daher stets Nein eval gt MURKS 7 Ja gt Nein eval gt MURKS 7 Nein gt Nein Gew nschtes Konstrukt eval gt define Gewinn Prognose lambda sexpr cond not number sexpr Keine Zahl number sexpr print Doppelter Gewinn print 2 sexpr newline print Dreifacher Gewinn print 3 sexpr newline ORSI JI eval gt Gewinn Prognose 1000 Doppelter Gewinn 2000 Dreifacher Gewinn 3000 OK Wert des letzten Konstruktes Notiertes Konstrukt eval gt define MURKS 8 lambda sexpr cond not number sexpr Keine Zahl number sexpr 1 2 KOMBINIEREN VON KONSTRUKTEN 111 print Doppelter Gewinn print 2 sexpr newline print Dreifacher Gewinn print 3 sexpr newline OK Die Klammer nach dem Konstrukt newline schlie t die 2 Klausel des cond Kon struktes Das folgende print Kon strukt ist damit die 3 Klausel mit dem Symbol print an der Stelle des Pr di kates erste Position Un gl cklicher weise wird die 3 Klausel nicht er reic
550. u Abschnitt 2 4 4 S 259 Die zweite Liste wird Symbol f r Symbol abgearbeitet F r jedes Symbol pr fen wir ob es markiert ist Wenn es markiert ist dann geh rt es zur Schnittmenge Da es in der zweiten Li ste nochmals vorkommen kann heben wir im Trefferfall die Markierung wieder auf Alle nicht markierten Symbole geh ren nicht zur Schnitt menge Zum Schluss heben wir die noch bestehenden Markierungen von Symbolen der ersten Liste auf eval gt define Konten abcedefg mti Jk Irma p eval gt define Offene Posten tt ZU og a cy eval gt define remprop Ersatzkonstrukt lambda Symbol Key putprop Symbol Key f eval define Schnittmenge Symbol lambda Liste 1 Liste 2 letrec Marke gensym Markieren for each lambda x 2 2 ABBILDUNGSOPTION LISTE 197 cond symbol x putprop x Marke t t t Liste 1 Raus Unmarkiert lambda Liste cond null Liste list and symbol car Liste getprop car Liste Marke Im markierten Fall Markierung zurueck setzen Dadurch keine doppelten Symbole in der Ausgangsliste remprop car Liste Marke cons car Liste Raus Unmarkiert cdr Liste t Raus Unmarkiert cdr Liste beginO Raus Unmarkiert Liste 2 L schen noch bestehender Marken z in Ger Liste 1 for each lambda x cond and symbol x getprop x Marke remprop x Marke t t Liste_1 eval gt Schnittmenge Symbol Ko
551. u erf llenden Leistungen hier als lt modul func tions gt bezeichnet zun chst durch einen kennzeichnenden Namen an zugeben Im n chsten Verfeinerungsschritt sind die Funktionen des Mo duls weiter zu pr zisieren und zwar durch die Beschreibung ihrer Signa tur Ein und Ausgabe in Form der lambda Variablen und dem Funkti onswert R ckgabewerte F r eine Beschreibung von Einschr nkungen constraints und und von Nebeneffekten side effects verwenden wir entsprechende Symbole So k nnen wir verdeutlichen welche Ver nde rungen bleibende Wirkung haben also l nger leben als die Aktivierung des Moduls Dauerhaftigkeit Persistenz Damit ergibt sich folgendes Beschreibungsraster define lt modul function gt lambda lt variable gt define contraints r lt text gt define side effects lt text gt lt value gt Dieses Spezifizieren ist ein Wechselspiel von Problemdurchdringung Analyse Erarbeitung einer Modulhierarchie Synthese und berpr fung von Modulbeschreibungen Revision In diesem Wechselspiel ent stehen neue zum Teil bessere Ideen die h ufig eine Umstrukturierung bedingen Der Beschreibungsrahmen erleichtert das Modifizieren Mit Hilfe des Texteditors sind die einzelnen Slots des Rahmens leicht um 414 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN h ngbar Beispiel F rsorge Automation im Sozialamt einer Kommune Das System F rsorge rationalisiert das Zahlbarma
552. ual x list null Nur eine Subliste lambda x and pair x null cdr x pair car x A L 2 2 ABBILDUNGSOPTION LISTE 187 lambda x cond or not pair x null x Hf or Leere A Liste x Nur eine Subliste x t pair car x A L cdr x t A L Objekt eval gt A Liste a 10 b 9 ce 3 gt t eval gt A Liste gt t eval gt A Liste a b c 3 gt FE eval gt A Liste lambda X 1 2 gt f Bei der Definition eines A Listen Konstruktors ist zu entscheiden ob die A Liste dasselbe Attribut denselben Schl sselbegriff mehrfach ent halten kann oder nicht Multiplizit t Der oben skizzierte Selektor Mein assq ware nicht in der Lage eine zweite Auspr gung desselben Attri buts zu selektieren wie das folgende Beispiel zeigt eval gt define K001 Strasse An der Eulenburg 6 Ort Reppenstedt PLZ 21391 Telefon 04131 63845 eval gt define Cons A Liste lambda Neue Element A Liste cond pair Neue Element cons Neue Element A Liste t cons list Neue Element A Liste eval gt set K001 Cons A Liste Telefon 01626989027 K001 eval gt K001 gt Telefon 01626989027 Strasse An der Eulenburg 6 Ort Reppenstedt PLZ 21391 Telefon 04131 63845 188 KAPITEL 2 KONSTRUKTIONEN eval gt Mein assg Telefon K001
553. uch die Funktionsapplikation also zus tzlich die Na men der Argumente Uns interessieren die Wirkungen der unterschied lichen Benennung im Hinblick auf die Transparenz der gesamten Kon struktion Dazu betrachten wir exemplarisch vier Entscheidungsproble me 1 die Informationsaufteilung zwischen dem Funktionsnamen und den Namen f r die Lambda Variablen 2 das standardisierte Einbeziehen von konstruktionsbedingten In formationen 3 die Informationsaufteilung zwischen Namen und einem zugeord netem Daten Lexikon und 4 die Sortierf higkeit f r ein schnelles Recherchieren Aus Vereinfachungsgr nden liegen die Kundendaten in unserem Bei spiel als Liste vor wobei der Firmenkurzname als optionales zweites Li stenelement angegeben ist Zwei Kunden sind vorab folgenderma en definiert eval gt define Kunde 1 Software AG SAG eval gt define Kunde 2 Siemens AG Ist der Firmenkurzname nicht angegeben dann ist ein Ersatzwert zu selektieren Dieser ist wie folgt definiert eval gt define UNBEKANNTER KURZNAME Problem 1 Informationsaufteilung zwischen Funktionsname und Na men der lambda Variablen Bei der Benennung des gew nschten Selektors ist zu entscheiden wel che Informationen im Funktionsnamen und welche in den Namen der lambda Variablen zu hinterlegen sind 382 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN Losung A e Funktionsname Haupt Informationstrager e Kurze beliebige Namen f
554. uchsanalyse ermittelt aus den gepr ften Antragsdaten Betr ge und Zahlungstermine falls Anspr che bestehen define Bescheid Lameda eee she define Ruckrechnung lambda ees eval gt module F rsorge scheme provide Formularbezogene Datenpflege require Anspruchsanalyse Aktenverwaltung Zugangspr fung define effects F rsorge pr ft Antr ge auf Zahlung von Sozialhilfe erstellt termingerecht Auszahlungsanordungen und f hrt die Akten F rsorge weist unberechtigte Terminalbenutzer ab define Formularbezogene Datenpflege lambda xes define Rechtsbelehrung lambda Top level Nutzung eval gt require F rsorge eval gt Formularbezogene Datenpflege Alles klar gt Alles klar Im Rahmen der weiteren Verfeinerung k nnten wir z B folgenden Modul Anspruchsanalyse erhalten Er zeigt dass zu diesem Zeit punkt die einzelnen Modulfunktionen unterschiedlich fein spezifiziert sind eval gt module Regels tze scheme provide Wohngeld Sozialhilfe define effects Regels tze define Wohngeld lambda define Sozialhilfe lambda ese eval gt module Anspruchsanalyse scheme provide Bescheid require only in Regels tze Wohngeld Sozialhilfe Berechnungsgrundlage 416 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN define effects Anspruchsanalyse ermittelt aus den gepr ften Antragsdaten Betr ge und Zahlungstermine fa
555. um Baum Baum and vector Baum vector length Baum 5 integer Baum Hoehe Baum positive Baum Hoehe Baum string Baum Key Baum AVL Baum linker Teilbaum Baum AVL Baum rechter Teilbaum Baum Baum Hoehe Baum 1 max Baum Hoehe linker Teilbaum Baum Baum Hoehe rechter Teilbaum Baum lt Balance Baum 1 gt Balance Baum 1 or leerer Baum linker Teilbaum Baum string ci lt Baum Key linker Teilbaum Baum Baum Key Baum or leerer Baum 230 KAPITEL 2 KONSTRUKTIONEN rechter Teilbaum Baum string ci lt Baum Key Baum Baum Key rechter Teilbaum Baum Baum t Zur Bestimmung der Ausgeglichenheit Balance lambda Baum cond leerer Baum Baum 0 t Baum Hoehe rechter Teilbaum Baum Baum Hoehe linker Teilbaum Baum leerer Baum Make Baum 0 null null leerer Baum lambda Baum and vector Baum vector length Baum 5 Baum Hoehe Baum 0 string length Baum Key Baum 0 string length Baum Text Baum 0 null linker Teilbaum Baum null rechter Teilbaum Baum Baum Hoehe lambda Baum vector ref Baum 0 Baum Key lambda Baum vector ref Baum 1 Baum Text lambda Baum vector ref Baum 2 linker Teilbaum lambda Baum vector ref Baum 3 rechter Teilbaum lambda Baum vector ref Baum 4 get key AVL Baum lambda
556. um Hoehe 1 Baum Baum Hoehe r Baum key text 1 Baum r Baum cond ausgeglichen and lt l hoehe r hoehe 2 232 KAPITEL 2 KONSTRUKTIONEN lt r hoehe l hoehe 2 knotenbildung Baum Key Baum Baum Text Baum 1 Teilbaum r Teilbaum Fall 1 and gt l hoehe r hoehe lt Balance 1 Teilbaum 1 let 1 1 teil linker Teilbaum l Teilbaum r l teil rechter Teilbaum 1 Teilbaum r l teil amp r teil knotenbildung Baum Key Baum Baum Text Baum r l teil r Teilbaum knotenbildung Baum Key 1 Teilbaum Baum Text 1 Teilbaum 1 l teil r l teil amp r teil Fall 2 and gt l hoehe r hoehe Balance 1 Teilbaum 1 let neue wurzel rechter Teilbaum 1 Teilbaum l r l teil linker Teilbaum neue wurzel 1 1 teil linker Teilbaum 1 Teilbaum r r 1l teil rechter Teilbaum neue wurzel 1 1 teil amp l r 1l teil knotenbildung Baum Key 1 Teilbaum Baum Text 1 Teilbaum l 1 teil l r l teil r r l teil amp r teil knotenbildung Baum Key Baum Baum Text Baum r 1 te1l r Teilbaum knotenbildung Baum Key neue wurzel 2 3 ABBILDUNGSOPTION VEKTOR 233 Baum Text neue wurzel 1 l teil amp l r l teil r r l teil amp r teil Fall 3 and lt l hoehe r hoehe gt Balance r Teilbaum 1 det r r teil rechter Teilbaum r Teilbaum l r teil linker Teilbaum r Teilbaum Ad Teilel r reil knotenbildung Baum Key
557. um eine begrenzte ET begrenzt weil die Definition der Bedingungen sich nicht in den Regelanzeigerteil hineinzieht Eine ET Verkehrsampel mit Zust nden wie ROT GELB und GR N als Angaben in den Regeln w re nicht begrenzt F r eine begrenzte ET wird folgende Notation verwendet gem DIN 66241 51 e im Entscheidungsteil N N Die Bedigung ist erf llt Die Bedingung ist nicht erf llt Die Anwendung der Regel ist nicht davon abh ngig ob die Bedingung erf llt oder nicht erf llt ist Man kann dieses Zei chen als Dokumentation der Irrelevanz betrachten Die Be dingung kann gepr ft werden nur ist das Pr fungsergebnis unerheblich Ausschlussanzeiger d h f r die Entscheidung ist die Bedin gung nicht definiert ihr Wahrheitswert kann nicht ermittelt werden Ist hier wegen der Vollst ndigkeit angegeben und wird im Beispiel nicht verwendet e im Aktionsteil X Die Aktion ist durchzuf hren blank Die Aktion ist nicht durchzuf hren Bei einer begrenzten Eintreffer Entscheidungstabelle ist feststellbar ob f r alle m glichen Bedingungskombinationen auch Regeln genannt 82 KAPITEL 1 KONSTRUKTE Kontonummer angegeben Kontonummer lt 40000 Betrag gt 50 00 Zweck genannt Dem Chef vorlegen Zuruck an die Fachab teilung schicken Umkontieren auf Konto sonstiges Vorgang an Abteilung abgeben Buchung vollziehen Legende Formale Vollst ndigkeits berpr fung 2 einwert
558. und dessen rechter Teil der Wert des zweiten Argumentes von cons ist Die Bezeichnung dotted pair leitet sich davon ab dass zwischen die evaluierten Argumente ein Punkt eingef gt wird eval gt cons noch nicht gt noch nicht Die externe Darstellung eines Punkt Paares die als Eingabe und Aus gabe verwendet wird hat die Reihenfolge ffnende Klammer symbo lischer Ausdruck Zwischenraum Punkt Zwischenraum symbolischer Ausdruck und dann schlie ende Klammer Die Zwischenr ume sind er forderlich um ein Punkt Paar von einer Gleitkommazahl zu unterschei den bzw um den Punkt nicht als Namensteil eines Symbols aufzufassen 1 2 KOMBINIEREN VON KONSTRUKTEN 59 Gleitkommazahlen eval gt 1 2 3 4 gt 4 6 Punkt Paar eval gt cons 1 2 3 4 gt 1 2 3 4 Punkt als Namensteil eval gt cons Bremer Lagerhaus AG f gt Bremer Lagerhaus AG f Das Punkt Paar verweist auf die interne Abbildung eines symboli schen Ausdruckes im Speicher des LISP Systems Bei der cons Anwen dung wird in den klassischen LISP Implementationen eine sogenannte LISP Zelle auch cons Zelle genannt im Speicher mit den Adressen der Werte der beiden Argumente generiert Eine Liste ist damit ein Spezial fall einer Punkt Paare Struktur Abbildung 1 15 S 60 Sie ist entwe der e ein null Zeiger bzw nil Zeiger oder e ein Punkt Paar dessen car Teil ein symbolischer Ausdruck ist und dessen cdr Teil
559. und und Bearbeiter auf dem Bildschirm ausgibt eval gt define Describe Verwahrkonto lambda K cond Verwahrkonto K Describe Konto K newline 2 6 GENERIERTE ZUGRIFFSKONSTRUKTE 317 display Buchungsgrund w display Verwahrkonto Buchungsgrund K newline display Bearbeiter j display Verwahrkonto Bearbeiter K t error Kein Verwahrkonto K eval gt Describe Verwahrkonto V001 gt Inhalt des Kontos 3 Name Inhaber Meyer Adresse Inhaber D 21399 Luneburg Einzahlungen O Auszahlungen 0 Kontostand 0 Buchungsgrund Unbekannt Bearbeiter Krause Das skizzierte define struct Konstrukt ermoglicht eine einfache Vererbung Es verlangt dass eine Datenstruktur Klasse nur von einer anderen Datenstruktur erben kann Damit hat jede Klasse nur eine Oberklasse auch Superklasse genannt Erst mit dem Zulassen mehre rer Oberklassen multiple Vererbung gewinnt man Flexibilitat um spe zielle Operationen schrittweise inkrementell aus Allgemeineren kon struieren zu k nnen Vorteilhaft ware auch der Sonderfall einer selbst bez glichen Vererbung Eine bestehende Struktur k nnte ohne gro en Aufwand um einige Felder erweitert werden wenn die Erg nzung in die betroffenen Objekte Instanzen bernommen propagiert w rde eval gt define struct Klasse I slot I slot II mutable transparent eval gt define Foo make Klasse I value I value II eval gt Foo gt
560. ur Anfangsgeschichte von LISP z B 175 So ist Mc Carthy s LISP 1 5 quasi bis Mitte der 60iger Jahre der weltweite LISP Standard kaum mit modernen LISP Systemen wie z B das hier genutz te PLT Scheme vergleichbar Die Ahnenreihe heutiger LISP Systeme ent wickelt aus dem Stammvater LISP 1 5 ist sehr sehr lang In der Praxis stellt sich f r jede Programmiersprache die Frage Gibt es einen m glichst berall akzeptierten Standard F r LISP lautet die klare Antwort Jein 148 Es gab eine Reihe von Bem hungen f r LISP einen Standard zu definieren zu nennen sind z B 1 EuLISP europ ischer LISP Standard initiiert im Jahr 1985 in Pa ris und erste Interpreterimplementation 1990 Es ist ein LISP mit der Intention weniger von der Vergangenheit ge pr gt zu sein less encumbered by the past in Relation zu Common LISP Es sollte nicht so minimalistisch wie Scheme sein und eine starke Ausrichtung auf das objekt orientierte Paradigma umfassen TELOS The EuLisp Object System 2 Common LISP 174 Common LISP kurz CL ist ein komplexer vielfaltige Paradigmen umfassender LISP Dialekt der 1994 als ANSI X3 226 1994 Stan dard definiert wurde Naheres zum Standard und zur Community Z B http www lispworks com Zugriff 6 Jan 2010 3 Scheme 151 aktuelle Fassung http www r6ers org final r6rs pdf f Zugriff 06 Jan 2010 Scheme wurde von Gerald Jay Sussman und Guy Lewis Steele
561. usreichend Benzinpumpe arbeitet korrekt 3 2 SPEZIFIKATION MIT LISP 403 Benzinfilter Durchlaessigkeit keine Benzinversorgung arbeitet nicht eval gt putprop Stand nachfragen t eval gt putprop Durchlaessigkeit nachfragen t Beispiel einer Applikation von Diagnose eval gt Diagnose Motor arbeitet gt Benutzereingabe Nenne Stand von Tankfuellung ausreichend Benutzereingabe Nenne Durchlaessigkeit von Benzinfilter keine Ergebnis Motor arbeitet nicht Benzinversorgung arbeitet nicht Benzinfilter Durchlaessigkeit keine Tankfuellung Stand ausreichend Benzinpumpe arbeitet korrekt 3 2 Spezifikation mit LISP Spezifizieren hei t eine zun chst noch unbekannte Aufgabenstellung durch sprachliche Festlegung ihres Ergebnisses bzw ein zun chst noch unbekanntes Objekt durch sprachliche Festlegung seines Gebrauchs zu pr zisieren lt gt z B 90 Publikationen zur Thematik Software Spezifikation gehen von unter schiedlichen Begriffsdefinitionen aus Zumeist basieren sie auf der Ab grenzung einzelner Phasen des Lebenszyklus lt gt Abbildung 1 13 S 51 und der Beschreibung ihrer Dokumente Zielvorstellung ist dabei die Spezifikation mit der Pr zision der Mathematik und der Verst ndlichkeit der Umgangssprache Spezifizieren im Sinne eines Pr zisierens umfasst alle Phasen In den ersten Phasen bezieht sich die Spezifikation auf die Analyse und Synthe se m gliche
562. ussage und die von Diagnose ermittelten Begr n dungen sind Listenelemente der Variablen AUSSAGEN T1 Testdaten Abschnitt 3 1 4 S 402 T2 Testapplikation Abschnitt 3 1 4 S 403 eval gt define Diagnose lambda Objekt Eigenschaft letrec Primitive Konstruktoren und Selektoren vgl El Make Aussage lambda Objekt Eigenschaft Wert list Objekt Eigenschaft Wert Get Objekt lambda Aussage car Aussage Get Eigenschaft lambda Aussage list ref Aussage 1 Get Wert lambda Aussage list ref Aussage 2 Get Bedingungen lambda Regel car Regel Get erste Bedingung lambda Bedingungen 400 KAPITEL 3 KONSTRUKTIONSEMPFEHLUNGEN car Bedingungen Get Rest Bedingungen lambda Bedingungen cdr Bedingungen Get aktion lambda Regel list ref Regel 1 Get Regeln lambda Eigenschaft vgl El 5 getprop Eigenschaft Regeln Get erste Regel lambda Regeln car Regeln Get Rest Regeln lambda Regeln cdr Regeln Regel ist relevant wenn ihre Aktion gleiches Objekt hat wie die zu pr fende Aussage Relevante Regeln lambda Regeln Objekt Eigenschaft cond null Regeln null eq f Regeln null eq Objekt Get Objekt Get aktion Get erste Regel Regeln cons Get erste Regel Regeln Relevante Regeln Get Rest Regeln Regeln Objekt Eigenschaft t Relevante Regeln Get Rest Regeln Regeln Objekt Eigenschaf
563. val gt define Vorgangsverwaltung lambda x letrec Anforderung lambda begin newline print Zeige naechsten Vorgang J N read Zyklus lambda Liste let Antwort Anforderung cond eq Antwort J cond Umschalten auf den Anfang der Liste null Liste print car ARBEITSPLAN Zyklus edr ARBEITSPLAN 2 2 ABBILDUNGSOPTION LISTE 163 Ubergang auf das n chste Element t print car Liste Zyklus cdr Liste t Ende cond null ARBEITSPLAN Keine Aufgaben t Zyklus ARBEITSPLAN eval gt Vorgangsverwaltung ARBEITSPLAN gt Zeige naechsten Vorgang J N J Uber die Investition Lagerhalle West entscheiden Zeige naechsten Vorgang J N J Zeugnis fur den Abteilungsleiter Meier diktieren Zeige naechsten Vorgang J N J Budgetplanung fur die Zentralabteilung aufstellen Zeige naechsten Vorgang J N J Uber die Investition Lagerhalle West entscheiden Zeige naechsten Vorgang J N J Zeugnis fur den Abteilungsleiter Meier diktieren Zeige naechsten Vorgang J N J Budgetplanung fur die Zentralabteilung aufstellen Zeige naechsten Vorgang J N N Ende Das Hinzuftigen eines neuen Vorganges oder das Herausnehmen ei nes fertigen Vorganges ermoglicht der Mutator set in Verbindung mit dem Konstruktor cons und dem Selektor cdr Wir konnen als entspre chende Beispiele definieren eval gt Vorgang hinzufugen
564. ve Funktion wie folgt eval gt define Simple Match lambda Muster Liste cond and null Muster 240 KAPITEL 2 KONSTRUKTIONEN null Liste t null Liste null cdr Muster eg car Muster Ht and or null Muster null Liste f or eq car Muster car Liste eq car Muster Simple Match cdr Muster cdr Liste eq car Muster cond Simple Match cdr Muster cdr Liste gt z Fall a Simple Match Muster cdr Liste t Fall b Simple Match cdr Muster Liste t Fall c t Pall a t Die erste Klausel des ersten obigen cond Konstruktes pr ft ob das Muster hier 1ambda Variable Muster und der Pr fling hier Lambda Variable Liste zum gleichen Zeitpunkt abgearbeitet sind also faktisch gleich lang sind Ist die Liste abgearbeitet und das letzte Element von Muster ein Stern dann passt das Muster da wir unterstellen dass der Stern auch ein leeres Segment deckt Ist die Liste k rzer dann kann das Muster nicht passen 3 Klausel Ist das erste Element im Muster gleich dem ersten Element im Pr fling dann entscheidet der Mustervergleich der Restlisten ob das Muster passt oder nicht 4 Klausel Ist das erste Element im Muster das Fragezeichen dann passt es auf jedes erste Ele ment im Pr fling Auch dann entscheidet der Mustervergleich der Restli sten daher auch 4 Klausel Ist das erste Element des Mu
565. ver Zugriffskonstrukte Er rtert wird das Konzept ab strakter Datentypen Abschnitt 2 6 1 S 306 Wesentlicher Vorteil ist die R ckgriffsm glichkeit auf existierende Datentypen bei der Definition neuer Datentypen Es werden Eigenschaften von existierenden Datenty pen auf neue vererbt Wir zeigen die einfache statische Vererbung Abschnitt 2 6 3 S 314 Eine weitergehende Vererbung wird im Zusam menhang mit Klassen Instanz Konzepten behandelt Abschnitt 2 8 2 5 397 2 6 1 Abschirmung von Werten Definieren wir ein Konstrukt dann bem hen wir uns mit den gew hlten Symbolen und Strukturen eine gedankliche Verkn pfung zwischen rea len und formalen Einheiten Objekten herzustellen Entsprechend dem jeweiligen Denkrahmen Paradigma Abschnitt 2 1 S 141 und den M glichkeiten seiner Umsetzung betonen wir eine passive daten wert bezogene oder aktive operations bezogene Sicht Abschnitt 1 2 S 50 L sen wir eine kleine Programmieraufgabe wie das Verwalten eini gen Postanschriften dann werden wir im imperativ gepr gten Denkrah men fr hzeitig die ben tigten Speicherpl tze benennen und ordnen Wir definieren eine passive Datenstruktur Eine solche Datenstruktur zeigt Tabelle 2 9 S 307 Sie ist in COBOL einer der Programmiersprache f r das imperativ gepr gte Paradigma formuliert 2 6 GENERIERTE ZUGRIFFSKONSTRUKTE 307 ADRESSE 05 NAME 10 ZUNAME EI nURBE SO 10 VORNAME EIIG
566. von Ideen und Bed rfnissen der Studierenden Hochschule Bremerhaven Universit t Bremen Universitat Hannover Fachhochschule Nordostniedersachen und Leuphana Universit t L neburg Vorwort aid Bi AP ast fe BA IE N Produkte entstehen kaum per Zufall Sie erfordern einen sorgsam geplanten Herstellungsprozess wenn es gilt sie wirtschaft lich in gew nschter Qualit t termingerecht zu produzieren Ein zielf h rendes Vorgehen bedingt fundierte Kenntnisse ber m gliche Bausteine Konstrukte bew hrte Konstruktionen und n tzliche Handlungsweisen Konstruktionsempfehlungen Dieses Buch vermittelt solche Kenntnis se Es wendet sich an alle die Schritt f r Schritt anhand von leicht nach vollziebaren Beispielen in LISt Processing LISP fundiertes Wissen ber Programme gewinnen wollen Aufbauend auf der klassischen LISP Basis werden moderne Konzepte wie die Objekt Orientierung und die Auftei lung auf mehrere Akteure z B Multithreading ausf hrlich behandelt und somit verstehbar Dieses Buch zum weiten Feld des programmierens in LISP ist prim r ein Produkt meiner Lehrt tigkeit an verschiedenen Hochschulen und da her von den Ideen Hinweisen und Korrekturen vieler Jahrg nge von Studierenden bestimmt Als LISP Dialekt dient jetzt Scheme in der Form des Revised Report on the Algorithmic Language Scheme 170 Die Ausf hrungen sind zum Teil eine Aktualisierung und Fortschreibung meines Buches Software Konst
567. von der Situation zum jeweiligen Aufrufungszeitpunkt abh ngt ist diese stets eine andere Es besteht eine dynamische Situation man spricht daher von einer dynamischen Bindung Das Closure Konzept ist demgegen ber eine statische Bindung da sich die Definitionsumgebung f r die Funktion nicht ndert Im Scheme Kontext bezeichnet man eine statische Bindung als lexikalische Bindung und die dynamische Bindung als fluid binding Wenn eine Funktion angewendet wird dann sind die Werte der Ar gumente in den Funktionsk rper zu bernehmen Die folgenden drei Schritte stellen ein Erkl rungsmodell f r diese bernahme dar Ab bildung 1 12 S 45 1 Schritt Binden der lambda Variablen a Es werden neue Pl tze in LOCATIONS f r jede lambda Vari able der Funktion belegt b Die Werte der Argumente des Funktionsaufrufes werden in den korrespondierenden neuen Pl tzen gespeichert Das f hrt zu einem neuen STORE c Die lambda Variablen werden dann an die neuen Pl tze in LOCATIONS gebunden Dies entspricht einer Neubenennung von Werten d Diese Bindung bewirkt eine neue Umgebung ENVIRONMENT In der neuen Umgebung zeigen die lambda Variablen auf die neuen Pl tze in LOCATIONS 2 Schritt Evaluieren in neuer Umgebung Die Rechenvorschrift der Funktion wird in der neuen Umgebung in Verbindung mit dem neuen STORE evaluiert 48 KAPITEL 1 KONSTRUKTE 3 Schritt Aktualisieren der alten Umgebung Na
568. weis Was ist wahr Klassisch ist in LISP Systemen alles wahr was ungleich false oder ist z B auch die Zahl 7 oder die Zeichenkette Alles klar So auch in PLT Scheme DrScheme bei der Einstellung lang scheme also in der Sprachwahl Module Abbildung 1 8 S 26 eval gt if 7 Ja Nein gt Ja gt Jf Nicht doch Ja Nein gt Ja gt if a Ja Nein gt Ja gt if cos 1 Ja Nein gt Ja gt if a b c Ja Nein gt Ja Spezielles Symbol define eval gt define lt symbol gt lt sexpr gt Das spezielle Symbol define bindet ein Symbol an den Wert von lt sexpr gt im aktuellen Kontext d h die Bindung findet in der Umge bung statt in dem die define Auswertung erfolgt Dabei wird das erste Argument hier lt symbol gt nicht evaluiert das zweite hier lt sexpr gt jedoch Der Wert des gesamten define Konstruktes ist uninteressant und deshalb prinzipiell auch nicht spezifiziert 6Hinweis Bei einigen LISP System z B bei PC Scheme wird im Falle des define Konstruktes das Symbol zur ckgegeben Dies erfolgt weil der READ EVAL PRINT Zyklus f r jeden eingelesenen symbolischen Ausdruck einen Wert in der PRINT Phase zur ckgibt 26 KAPITEL 1 KONSTRUKTE A Namenlos DrScheme mfe xj Datei Bearbeiten Anzeigen Sprache Scheme Einf gen Hilfe Namenlos define v Macro Stepper Debugger Syntaxpr fung X Start AP stop lang
569. wenden eine Funktion die f r ein Argument definiert ist auf eine Liste von Argumenten an Der Wert des map Konstruktes ist eine Liste die die Resultate der einzelnen Funktionsanwendungen enth lt Der Wert des for each Konstruktes ist undefiniert denn es dient zur Ausf hrung von Nebeneffekten Hinweis Mapping functions In Common LISP umfasst das Repertoire an mapping functions auch Kon strukte bei den sich die Funktionsapplikation auf die jeweilige Restliste bezieht z B maplist oder mapcon Die beiden hier verwendeten map ping functions sind in Scheme Notation wie folgt definierbar N heres zur Rekursion Abschnitt 1 3 S 113 eval gt define for each lambda function liste cond null liste void t function car liste for each function cdr liste eval gt for each print 1 2 3 gt 123 eval gt define map lambda function liste cond null liste list t cons function car liste map function cdr liste eval gt map list 1 2 3 gt 1 2 3 Beispiel Sachmittelbedarf Wir betrachten eine Beh rde und deren Sachmittelbedarf F r das Jahr 2010 hatte die Abteilung w einen Bedarf pro Quartal in folgender H he eval gt define Sachmittel Quartalsbedarf W 2010 150000 100000 80000 120000 102 KAPITEL 1 KONSTRUKTE Fur das Jahr 2011 ist eine Steigerung von 2 45 Prozent vorzusehen d h jeder Quartalsbetrag ist mit 1 0245 zu multiplizieren um d
570. wort Alter false eval gt and Antwort Name Antwort Alter gt 52 KAPITEL 1 KONSTRUKTE Offensichtlich ist L sung 2 mit dem and Konstrukt leichter zu ver stehen als L sung 1 obwohl beide L sungen hnlich aufgebaut sind Die L sung 2 weist einpr gsame mnemotechnisch besser gew hlte Symbo le auf und greift auf das and Konstrukt der Booleschen Algebra zur ck das als h ufig verwendetes Konstrukt schneller durchschaut wird als das hier selbstdefinierte quivalent das als foo Konstrukt formuliert ist Die Auswahlentscheidung zwischen L sungsalternativen ist allgemein nicht trivial Es ist schwierig festzulegen welche Aufgabenteile Leistun gen in einem Konstrukt zusammenzufassen sind und wie das Konstrukt im Detail zu formulieren ist F r das Problem eine komplexe Aufga be zweckm ig in kleinere Einheiten Konstrukte zu modularisieren gliedern gibt es selten eine L sung die unstrittig gegen ber ihren m glichen Alternativen nur Vorteile bietet Die Menge der konkurrie renden und zum Teil sogar sich widersprechenden Forderungen verhin dert dass es den eindeutigen Favoriten gibt Die Entscheidungen zur Bildung eines Konstruktes sind daher Kompromissentscheidungen Eine tragf hige Kompromissl sung ist einerseits von den allgemein bew hr ten und anerkannten Konstruktionsregeln und andererseits von indivi duellen Bevorzugungen und Erfahrungen gepr gt Der folgende Abschnitt stellt anhand des Beispi
571. x y Speicher x y Matrix gt lt procedure dispatch gt define put x y matrix put put gt lt procedure put gt define get x y matrix get put 1 2 heute gt matrix 1 2 heute get 1 2 gt heute put 3 4 gestern gt matrix 3 4 gestern 1 2 heute get 3 4 gt gestern put a bc a gt ERROR procedure put expects 3 arguments given 2 abc a put a bc a Alles klar gt matrix a b c a Alles klar 3 4 gestern 1 2 heute get a b c a gt Alles klar 2 3 ABBILDUNGSOPTION VEKTOR 215 Geschachtelte get prop Konstrukte e 1 Geschachtelte getprop Konstrukte Konten mit unterschiedlichen Trend Funktionen F r ein Konto z B K001 wird ber die Eigenschaft Konto TYP ein Symbol selektiert Dieses Symbol hat als Wert seine Eigenschaft Trend die anzuwendende Trend Funktion Das Argument f r diese Funktion ist unter der Eigenschaft Buchungen gespeichert Genutzte Sprache Scheme mit 77 module compat mzschenme eval gt putprop K001 Konto Typ Vermoegen eval gt eval gt putprop K002 Konto Typ Verbrauch eval gt eval gt putprop K001 Buchungen 20 30 putprop K002 Buchungen 10 30 100 putprop Vermoegen Trend lambda Konto map lambda x 1 1 X getprop Konto Buchungen
572. xplode und Implode ist der PRINT Na me als Informationstrager manipulierbar Ein nicht interngemachtes Symbol engl uninterned symbol ist ber den PRINT Namen nicht referenzierbar Ein neues nicht internge machtes Symbol generiert das gensym Konstrukt Eine gensym Appli kation ist zweckm ig wenn ein Namenskonflikt mit existierenden oder sp ter generierten Symbolen zu verhindern ist Im Gegensatz zu klassischen LISP Systemen hat das Symbol in Sche me keine Funktionszellen als besonderes Elementarteilchen Damit wer den Ungereimtheiten zwischen funktionalen und nichtfunktionalen Wer ten vermieden Mit dem gensym Konstrukt ist auch in Scheme eine be sondere Funktionszelle mit Hilfe der Eigenschaftsliste realisierbar eval gt define Get F 0 eval gt define Set F 0 eval gt let Eigenschaft gensym set Get F lambda Symbol getprop Symbol Eigenschaft set Set F lambda Symbol Funktion putprop Symbol Eigenschaft Funktion t gt Fe eval gt Set F Foo lambda x y x y eval gt define Foo Alles klar eval gt Foo gt Alles klar eval gt Get F Foo 4 5 gt 9 Charakteristische Beispiele fur Abschnitt 2 4 eval gt Pascalsches Dreieck ausgeben define Pascalsches Dreieck lambda n Endzeile 268 KAPITEL 2 KONSTRUKTIONEN letrec Pascal lambda Grundseite i Zeile cond n Endzeile i Zeile Ausgabe Grundseite t Ausgabe
573. y Operation nicht implementiert display operation and null DATEN eq operation Eingabe set DATEN einfuegen in AVL Baum car parameter cadr parameter leerer Baum t t display Keine wohlstrukturierten Daten display DATEN 236 KAPITEL 2 KONSTRUKTIONEN Beispiel einer Applikation des Programms Aktenverwaltung Codebeginn S 229 eval gt define DATEN list eval gt begin Aktenverwaltung Eingabe L a 2 Fall Meyer Aktenverwaltung Eingabe L a 2 b Fortsetzung Meyer Aktenverwaltung Eingabe G b 3 2 Plan Westfeld Aktenverwaltung Eingabe Y 345 6 Fall Schulze Aktenverwaltung Eingabe Dortmund Stadtplanung Aktenverwaltung Eingabe Herbert Fall Herbert Aktenverwaltung Eingabe A 1 122 Rechnerbeschaffung Aktenverwaltung Eingabe G b 3 2 Plan Neu Westfeld Aktenverwaltung Ende D bonin scheme AVL DAT gt FC eval gt Aktenverwaltung Struktur zeigen Y 345 6 1 L a 2 b 2 L a 2 4 Herbert 1 G b 3 2 3 Dortmund 2 A 1 122 1 2 3 4 Zusammenfassung Vektor Ein Vektor ist eine Struktur mit konstanter Lange Seine Elemente konnen beliebige symbolische Ausdrticke sein also auch wieder Vektoren Ein Vektor hat sich selbst als Wert EVAL Regel 1 Abschnitt 1 1 2 S 21 Die Zugriffszeit ist unabh ngig davon ob auf ein Element mit kleinem oder gro em Index zugegr
574. ymour Papert x 1 Mar 1928 in Pretoria S dafrika entwickelte diesen Roboter um Kindern das Programmieren anschaulich zu machen 476 ANHANG A LISP SYSTEME Legende Module Koch Kurve S 477 hier n 3 eval gt Koch Kurve 3 1500 Abbildung A 4 Turtle Grafik Fraktalfigur Schneeflocke Mit der klassischen Turtle ist der Modul Koch Kurve S 477 programmiert Ergebnis Abbildung A 4 S 476 Mit einer solchen Fi gur hat sich schon um 1900 der schwedische Mathematiker Helge von Koch x 25 Jan 1870 und 11 Mar 1924 in Stockholm befasst Sie wird ihm zu Ehren daher auch als tiradische Koch Insel oder als Koch sche Schneeflocke bezeichnet Exkurs Fraktale Objekte Fractals Der Begriff Fractals stammt vom polnisch franz sischen Mathematiker Be noit B Mandelbrot lt gt 117 Man bezeichnet damit Objekte die sich nicht mehr mit den Begriffen wie Linie oder Fl che beschreiben lassen Solchen Objekten zwischen Linie Dimension 1 und Fl che Dimension 2 ordnet man eine nicht ganzzahlige eine fraktale gebrochene Dimen sion zwischen 1 und 2 zu Aufgrund wissenschaftlicher Vorarbeiten des franz sischen Mathematikers Gaston Julia spricht man in diesem Zusam menhang auch von Julia Mengen Kennzeichned f r Fractals sind die beiden Eigenschaften Selbst hnlichkeit d h man findet die Form des Gesamten in jedem Detail wieder Verkrumpelung d h es treten keine gl
575. z gt e c r cddddr Foo gt e c define Bar list copy Foo eval gt Bar gt 0 a e c d 0 eval gt set car cadr Baz f eval gt Baz gt 0 a Ez c olan HOH eval gt Foo gt 0 a f en a HOH eval gt Bar gt 0 a f o d 0f V eval gt ca eval gt Bei einer zirkularen Liste ist das hier eingesetzte list copy Kon strukt nicht n tzlich Hier w re die Kopie selbst mit Hilfe des cons Kon struktes zu programmieren Wir halten fest Wenn ein Listenelement ver ndert wird k nnen da durch gleichzeitig andere Listen davon betroffen sein Zu empfehlen ist daher eine Liste die als Konstante dient prinzipiell nicht zu ver ndern 36 p 23 Man stelle sich vor eine solche Konstante befindet sich in einem Lesespeicher engl read only memory Jeder nderungsver such f hrt zu einem Hardwarefehler Das folgende Beispiel macht noch 2 2 ABBILDUNGSOPTION LISTE 183 mals die Gefahr deutlich den Nebeneffekt der Modifikation zu berseh en Sprache R5RS eval gt define Parlaments Fraktion lambda x member x SPD CDU FDP Gruene Linke eval gt define so nicht lambda x let Teil Parlaments Fraktion x cond Teil set car Teil listi t list eval gt Parlaments Fraktion FDP gt fdp gruene linke eval gt so nicht FDP eval gt Parlaments Fraktion FDP f V 2 2 2 Assoziationsliste Wenn
576. ziert die Operanden Sicht in stark vereinfachter Art Auch hier f hren die Abstraktionsschritte zu einer Hierarchie von Konstrukten Beim Erg nzen um den Operanden Sachkonto werden die bestehenden Konstrukte wie Kunde Lieferant etc nicht ber hrt Das Zusammenfassen aller Operationen bietet daher ein Modularisie rungskonzept das ein Hinzuf gen von neuen Konstrukten im Sinne von Operanden erleichtert Ist allerdings eine neue Operation z B Umbe nennen sp ter zu erg nzen dann sind die Konstrukte Kunde Liefe rant Kassenkonto etc zu modifizieren 64 KAPITEL 1 KONSTRUKTE eval gt define Kunde lambda operation cond Neuanlegen operation x11 L schen operation x12 Anmahnen operation x13 t print list F r Kunden ist operation noch nicht definiert eval gt define Neuanlegen lambda x eq car x Neuanlegen eval gt define Meyer AG Kunde Neuanlegen Daten zur Meyer AG Legende Tabelle 1 4 S 56 Tabelle 1 8 Programmfragment Operand Kunde als Konstrukt Basis 1 2 KOMBINIEREN VON KONSTRUKTEN 65 So entsteht eine operanden gepragte Konstruktion Sie hat einen ob jekt orientierten Aufbau Im Mittelpunkt der systema naly tischen ber legungen stehen die Operanden im Sinne von Objekten N heres dazu lt gt Abschnitt 2 8 S 327 Die Frage ob die L sung Operation als Konstrukt Basis Tabel le 1 7 S 62 oder die L sung Operand als
577. zu abstrakteren Einheiten zusammenfassen zu k nnen 2 8 KLASSE INSTANZ MODELL 347 Charakteristisches Beispiel fur Abschnitt 2 8 Materialverwaltung Zum Verstehen der Aufgabe sind vorab einige An forderungen und Testfalle formuliert Dabei verweist die Abktirzung A auf eine Anforderung und die Abk rzung T auf einen Testfall Al Das Verwalten mixin Konstrukt stellt die Methoden Al 1 einlagern und Al 2 entnehmen bereit A2 Die Klasse Lagergut vererbt ihre Eigenschaften an Materialien die aus den Klassen A2 Stueckgut ee A2 2 Fluessigkeit A2 3 Eisenware und 4 A2 Farbes spezialisiert sind A3 Die folgenden Klassen runden die Materialverwaltung ab A3 1 Lagerplatzs A3 2 Bestellung A3 3 Lieferant und A3 1 Magazin Verwalter T1 An die Instanz E001 der Klasse Eisenware werden folgende Nachrichten gesendet T1 1 eval gt send E001 einlagern T1 2 eval send E001 entnehmen T2 Der aktuelle Bestand kann abgefragt werden z B wie folgt eval gt send lt objekt gt get Bestand eval gt define Lagergut interface interface get Produkt Identifikation get Produkt Bezeichnung get Datum letzte Einlagerung get Datum letzte Entnahme get Bestand set Produkt Identifikation set Produkt Bezeichnung set Datum letzte Einlagerung KAPITEL 2 KONSTRUKTIONEN set Datum letzte Entnahme set Bestand define Lagergut class object Lagergut interface init
578. zum Einbeziehen schon formulierter Aussagen zwingt Die Eigenschaft Modifizierbarkeit k nnen wir entsprechend dem fol genden Pr dikat Modifizierbar weiter aufschl sseln Modifizierbar ist eine Dokumentation wenn die nderung einfach vollst ndig und konsistent durchf hrbar ist eval gt define Modifizierbar lambda nderung and Einfach durchf hrbar nderung Vollst ndig durchf hrbar nderung Konsistent durchf hrbar 3 1 TRANSPARENZ DER DOKUMENTATION 395 Anderung Die einfache Durchf hrbarkeit der nderung setzt eine dem Benut zer vertraute Gliederung der Dokumentation voraus F r die Quellco detexte ist z B die Reihenfolge der einzelnen Konstrukte festzulegen Analysieren wir eine Konstrukte Hierarchie Abbildung 2 1 S 149 dann folgen wir den Abstraktionsebenen entweder von oben beginnend nach unten top down Ansatz oder umgekehrt von unten beginnend nach oben bottom up Ansatz Dabei ist eine feste Reihenfolge inner halb unseres Verbundes von Konstruktor Selektor Pr dik t und Mutator einzuhalten Zus tzlich sind Verweise auf abh ngige und redundante Text teil e erforderlich damit die nderung vollst ndig und konsistent durchf hr bar ist F r die gesamte Dokumentation wird keine Redundanzfreiheit angestrebt Sie widerspr che der Adressaten und Zweck Ausrichtung der Dokumente Das schlie t nicht aus dass einzelne Dokumente z B die Quick Referenzkarte m glichst redunda
579. zusicherung Legende Beispiel Konto S 329 Chart Konto A11 Konstrukt S 423 Gliederung in Slots Felder und Methoden Da die Klammern in LISP stets bedeutsam sind wurde bei den Methoden nicht die bliche UML Notation prim r C und Java gepr gt verwendet sondern LISPisch notiert also lt method gt lt parameters gt statt lt method gt lt parameters gt Abbildung 3 3 UML Klassensymbol mit Einteilung Beispiele abstract readOnly oder old Eine Zusicherung definiert eine Integritatsregel Bedingung Haufig be schreibt sie die zul ssige Wertmenge eine Vor oder Nachbedingung f r eine Methode eine strukturelle Eigenschaft oder eine zeitliche Bedin gung Beispiel Die Kundenangabe im Vertrag zur Rechnung sei gleich der An gabe in der Rechnung equal send Rechnung getkunde send send Rechnung getVertrag getKunde Die Angaben von zusicherung und merkmal berlappen sich So kann jedes Merkmal auch als eine Zusicherung angegeben werden Beispiele Merkmal als Zusicherung angegeben abstract truet readOnly true oder old true Ein Stereotyp ist eine M glichkeit zur Kennzeichnung einer Glie derung auf projekt oder unternehmensweiter Ebene Ein Stereotyp gibt in der Regel den Verwendungskontext einer Klasse Schnittstelle Bezie hung oder eines Paketes an Beispiele fachklasse prasentation oder vorgang SVerwandte Begriffe f r den Stereotyp si

Download Pdf Manuals

image

Related Search

Related Contents

NiTek Q4 Computer  第5回定時株主総会招集ご通知  User Manual  HTR4900 - Makita  AT9942 取扱説明書  V.03-2012 DC-5007  SYSMAC CS/CJ Series WS02-LCTC1-EV5 CX  Sexuality and Reproductive Health in Adults with Spinal Cord Injury  Pour télécharger le fichier cliquer ici  

Copyright © All rights reserved.
Failed to retrieve file