29 Zusammenfassung und Ausblick
|
|
- Guido Färber
- vor 8 Jahren
- Abrufe
Transkript
1 29 Zusammenfassung und Ausblick 29.1 Zusammenfassung Wichtige Themen der funktionalen Programmierung Funktionale Abstraktion, Definitionen und Ausdrücke Semantik: Substitutionsmodell, Reduktionsstrategien Funktionen höherer Ordnung, Idiome, Funktionale Abschlüsse Rekursion: Definitionen, Prozesse, Algorithmen Kontrollabstraktion: Backtracking, pattern matching Objekte und generische Funktionen Memo-Funktionen, (Strom-orientierte Programmierung) Relationale Programmierung Programmierstil Zusammenfassung Verarbeitungsmodell und Programmierstil Scheme Prolog Java Funktional Relational Imperativ objektorientiert - objektorientiert Verarbeitungsmodell Denotationale Semantik Scheme Prolog Java Anwendung von Relationale Zustände von Funktionen Anfragen an von auf Werte eine Datenbasis Objekten Zusammenfassung: Semantik Denotational und operational 695
2 Scheme Prolog Java λ-kalkül, Logik und Anweisungen, Ausdrücke, Relationen, Vor- und Nach- Wertesemantik Anfragen bedingungen Sematik: operational Scheme Prolog Java Reduktionsstrategien: Unifikation Virtuelle Vorgezogene Auswertung, und Suche Maschine eval Zusammenfassung: Eigenschaften Bezugstransparenz und Richtungsunabhängigkeit Bezugstransparenz Scheme Prolog Java ja, aber nur ja nein ohne Modifikatoren Richtungsunabhängigkeit Scheme Prolog Java nein ja, aber nur nein ohne funktionale Auswerteumgebung Schlupflöcher, eingebettete Programmierstile Scheme Prolog Java Imperativ funktional - Zusammenfassung Typsystem und Typprüfung Typsystem 696
3 Scheme Prolog Java Latentes Latentes Manifestes Typsystem Typprüfung Scheme Prolog Java Laufzeit Laufzeit Übersetzungszeit Zusammenfassung Vor- und Nachteile Latente versus statische Typisierung Scheme Prolog Java Kurze Programme, frühzeitige Symbolverarbeitung, Fehlererkennung, einfache Metaprogrammierung wohldefinierte Codeerzeugung zur Laufzeit Schnittstellen Programmierumgebung Scheme Prolog Java Interpreter Interpreter Compiler Compiler exploratives Programmieren Wann wählen wir welchen Programmierstil? Wir haben die Stärken von zwei unterschiedlichen Verarbeitungsmodellen besprochen. Beachte: Die Verarbeitungsmodelle sind nicht disjunkt. 697
4 Die meisten Abstraktionen aus einem Verarbeitungsmodell haben Entsprechungen in anderen Modellen. Es ist Ihre Aufgabe, bei einem gegebenen Modell jeweils die treffendsten Abstraktionen zu finden. Es ist Ihre Aufgabe, bei einem gegebenen Problem jeweils ein adäquates Verarbeitungsmodell zu wählen. Be specific. Use abstractions. Be concise. Sechs Maximen für guten Programmierstil Use the provided tools. Don t be obscure. Be consistent. (nach Norvig 92) Ausblick: Vertiefungsmöglichkeiten im Bachelorstudium (SoSe 2010) Grundstudiumspraktikum (GPRAK) Bildverarbeitungspraktikum Modul: Wissensverarbeitung Modul: Interactive Visual Computing Grundlagen von Datenbanksystemen Klausur Erste Klausur: , 9-12 Uhr Audi-I Wiederholungsklausur: , 9-12 Uhr ESA-B Tutorien zur Klausurvorbereitung: , Uhr, R-030 Erlaubte Hilfsmittel: Die Prüfungsunterlagen zur Vorlesung, der Rivised Report on Scheme, keine elektronischen Hilfsmittel Ausweise: Ein Lichtbildausweis, Studentenausweis EN DE Viel Erfolg für das weitere Studium! 698
5 Aus der Einleitung von Norvig, 1992: The premise of this book is that you can only write something useful and interesting when you both understand what makes good writing and have something interesting to say. This holds for writing programs as well as for writing prose. As Kerningham and Plauger put it on the cover of Software Tools in Pascal: Good programming is not learned from generalities, but by seeing how significant programs can be made clean, easy to read, easy to maintain and modify, human-engineered, efficient, and reliable, by the application of common sense and good programming practices. Careful study and imitations of good programs leads to better writing. Kerningham and Plauger 699
6 700
7 29.2 Vorbereitung auf die Klausur Zur Vorbereitung auf die Klausur prüfen Sie sich selbst und versuchen Sie, ob Sie die folgenden Fragen beantworten können: Auf welche Grundoperationen beziehen wir uns bei der funktionalen Programmierung? Erklären Sie den special form operator lambda. Was ist die Bedeutung eines funktionalen Ausdrucks? denotationell, operational? Wann sind beide Semantikdefinitionen äquivalent, wann nicht? Was ist das Substitutionsmodell der Auswertung? Welche Reduktionsstrategien gibt es? Erklären Sie die Begriffe Striktheit, vorgezogene Auswertung, verzögerte Auswertung. Welche Rolle spielt die Umgebung bei der Auswertung? Was sind Funktionen höherer Ordnung? Welche Funktionen bilden den Werkzeugkasten für den Entwurf von Funktionen? Warum sind funktionale Abschlüsse so wichtig? Was ginge nicht so einfach, wenn es in Scheme keine closures gäbe? Wann ist eine Definition rekursiv? Welche Prozesse werden durch rekursive Funktionen ausgelöst? Was ist Endrekursion? Wie überführen Sie eine allgemeine lineare Rekursion in eine Endrekursion? Können Sie eine endrekursive Funktion definieren, die die Länge einer Liste errechnet, oder die Funktion map endrekursiv definieren? Nennen Sie ein Beispiel für eine Baumrekursion. Nennen Sie ein Problem, das durch backtracking gelöst werden kann. Nach welchem Schema geht man beim backtracking vor? Welche Probleme lassen sich mit dem in der Vorlesung behandelten backtracking- Schema nicht lösen? Warum nicht? Läßt sich die Unifikation als pattern matching Problem formulieren? Was ist nötig, den Strom-orientierten Programmierstil in Scheme einzubetten, d.h. welche Sprachelemente müssen wir nachbilden? Welche Vorteile bringt verzögerte Auswertung? Was ist ein Datentyp? Welches Typsystem verwendet Scheme? 701
8 Was ist ein rekursiver Datentyp? Nennen Sie ein Beispiel. Was ist eine Spezifikation? Was ist eine Zusicherung (assertion)? Wann ist ein Programm korrekt? Wie stellen Sie sicher (und beweisen Sie), daß eine rekursive Funktion terminiert? Für welche Algorithmen haben wir Modifikatoren (set!) verwendet? Warum war das nötig? Welche Konsequenzen hat der Einsatz von Modifikatoren für die Semantik eines Programms? Wie unterscheiden sich generische Funktionen in CLOS von der Nachrichtenmetapher in Java? Was sind Ergänzungsmethoden? Was ist Methodenkombination? Was sind Symbole (in Scheme)? Nennen Sie je ein Problem, für das Sie den Algorithmus zur Lösung lieber in Prolog oder lieber in Scheme programmieren würden und begründen Sie Ihren Vorschlag. 702
9 A Verzeichnisse 703
10 Index =, 96 E/A-Relation, 60 Church-Rosser-Eigenschaft, 159 Übungsschein, 37 8-Damen-Problem, 312 als backtracking-problem, 327 Abbilden(map), 242 Ableitungsbaum, 113 abs, 90 Abschluß, siehe closure Abstraktion Datenabstraktion, 48, 111 funktionale Abstraktion, 48 Funktionsobjekt, 54 Namensgebung, 48 acos, 90 add1, 117 Akkumulator Endrekursion, 224 Akzessoren, 84 Algorithmus Beschreibung als Programm, 12 Definition, 12, 620 determiniert, 13 deterministisch, 13 Implementation, 263 nebenläufig, 13 nicht-deterministisch, 13 sequentiell, 13 Spezifikation, 263 terminieren, 13 Alphabet, 70 and, 97 and/or-trees, 415 Animation, 290 append, 102, 109 applikativ, 165 Argument Funktion, 60 Aristoteles, 409 ASCII-Zeichensatz, 132 asin, 90 assertions, 177 assoc, 112, 127 Assoziationsliste, 112 assq, 112, 127 assv, 112, 127 atan, 90 Atome, 43 Aufrufkeller, 223 Ausdruck, 43 Konstruktion, 46 Auslöschung, 92 Auswertung Normal form, 163 verzögert, 97, 164 vorgezogen, 97, 164 Backtracking, 311 objektorientiert, 535 Suchraum, 322 Backtracking-Schema, 323 Baukastenansatz, 239 Baum Ableitungsbaum, 113 baumartig Rekursion, 210 Bezugstransparenz, 161, 690 Definition, 159 Block, 68 blocks world, 449 bottom,
11 caching, 630 car, 105, 106 catch-all, 63 cddddr, 106 cdr, 105, 106 ceiling, 90 char, 133 Church, Alonzo, 54, 56 Clobbered Sibling Goal Problem, 423 CLOS Meta-Methoden, 467 closure, 281 Common Lisp, 28 complex?, 89 cons, 104, 109 Punktnoatation, 104 cons-zellen, 106 contract Modul, 263 contract.ss, 179 cos, 90 Curry-Verfahren, 277 Datenabstraktion, 84 Datenstruktur rekursiv, 107 Datentyp, 84, siehe Typ abstrakt, 84 Datum Julianisch, 99 debugging, siehe Fehlersuche defclass, 460 define-struct, 147 deklarativ, 159 Delegation, 534 deriv, 237 Dichte, 496 digit, 140 Disjunktion, 96 dotted pair, 109 draw.ss, 214 DrScheme Aufruf, 39 Fehlermeldungen, 42 teachpacks, 37 eager evaluation, 164 Eliza, 345, 346 Endrekursion, 224 environment, siehe Umgebung eq?, 125 equal?, 96, 125 eqv?, 125 Eratosthenes, 628 Ereignisquellen, 511 Ereignisse Weckaufträge, 511 Erfolgslisten-Verfahren, 321 Ergänzungsmethoden, 483, 484 evaluation eager, 97 lazy, 97 evaluator, 38 Evaluierung, 162 exp, 90 expressions, 38 expt, 90 extent, siehe Lebensdauer Fakten, 645 Fallunterscheidungen, 61 einseitig unless, 62 when, 62 Konditional cond, 62 zweiseitig if, 62 Falten, 245 Fehlersuche, 167 Fehlervermeidung,
12 first-name, 111 floor, 90 folding, 245 for-each, 340 fractals-module.ss, 214 Frege, G., 201 Funktion E/A-Relation, 60 partielle Anwendung, 277 Definition als Abstraktion, 53 generisch, 88, 464 kombinatorisch, 306 Memo-Funktion, 631 polymorph, 88 Signatur, 60 Typ, 60 Funktionen höherer Ordnung, 234 Funktionsdefinition, 58 Funktionskomposition, 280 Definition, 280 garbage collection, 226 Genauigkeit, 91 Generische Funktion, 464 gensym, 615 Gleichheit Listen, 123 Gleichheitsprädikate, 125 Gleichverteilung, 492 goldener Schnitt, 210 GPS, 406 Repräsentation der Regeln, 411 GPS Version 2, 429 gps1, 413 graphing.ss, 235 gui.ss, 285 Hoare, 26 Hopper Grace, 167 Identität, 123 Instanziierungsvariante, 647 integer?, 89 interleave, 307 Iteration, 249 join, 654 Julianisches Datum, 99 Kalender, 99 kanonisch, 162 Kardinalität, 85 Klassenattribute, 461 Klassenpräzedenzliste, 479 Klausel, 645, 648 Kopf, 648 Körper, 648 Kleene-Stern, 120 Klötzchenwelt, 449 Kochsche Schneeflocke, 212 Kombinatorik, 306 Kommentar, 46 Konfluenz, 159, 161 Kongruenzmethode, 495 Konjunktion, 96 Konkatenation Listen, 102 Konstruktoren, 84 Kontrollabstraktion Delegation, 534 Koreferenz, 353 Korrektheit, 177 partiell, 177 total, 177 lambda-abstraktor, 54 last-name, 110 lazy evaluation, 164 Leaping Before You Look Problem, 424 Lebensdauer, 69 Leerer Wert,
13 length, 101, 103 let lambda, 66 Lexikalische Analyse, 384 Lexikalische Einheiten, 51 lilies-module.ss, 220 Lisp-Familie, 28 list, 101, 109 list-ref, 130 Liste als Menge, 103 Definition, 100 leere Liste, 101 rekursive Definition, 107 Repräsentation, 122 Unterlisten, 306 Listen als closure, 149 Konstruktion, 104 Permutationen, 308, 309 Unterlisten, 307 Verweben, 307 List of successes, 321 Literatur Kommentare, 203 Programmierung funktional, 33 logisch, 34 objektorientiert, 34 relational, 34 log, 90 M.C. Escher 3 Welten, 114 Macro Definition, 608 Effizienzsteigerung, 611 make-vector, 145 mapping, 242 max, 90 means-ends-analysis, 407 Mehrfachauswertung bei Macros, 613 Mehrfachvererbung Methodenkombination, 480 member, 103, 126 member?, 128 memoization, 630 memq?, 126 memv?, 126 Mensa-Szenario, 522 Methodenkombination, 480 Akzessorfunktion, 482 Initialisierung, 500 Operatormethodenkombination, 482 Standard-Methodenkombination, 484 Methodenkonbination, 479 min, 90 Modell dynamisch, 522 Simulation, 487 statistisch, 490 Modifikatoren, 162 Modul, 253 Modularisierung, 267 modulo, 90 Monkey and banana problem, 441 Muster Variable, 349 my-cons, 149 my-length, 128 Nachklappern, 223 Nachrichtenmetapher, 531 broadcast, 533 CLOS, 533 Name nicht atomar, 55 Namen Scheme,
14 Namenskonventionen, 80 Natürliche Zahlen, 204 Negation, 96 Newton-Verfahren, 264, 269, 270 Normalform Auswertung, 162 not, 97 Notation Kommentar, 46 null?, 101 number?, 89 one-of, 115 Operator Opratorpräzedenz, 43 Operatoren logische, 96 or, 97 Paare, 104 pair?, 104 Parameter Aktualparameter, 60 Formalparameter, 60 PARRY, 348 pattern matching, 649 pattern matching Eliza, 349 Peanosche Axiome, 204 Planen, 430 Polymorphie Formen von, 88 Funktionen, 88 leere Liste, 101 Typen, 88 Pradikate zweiter Ordnung, 660 Pragmatik, 157 Primzahlen Sieb des Eratosthenes, 626 Problemlösen, 406 process.ss, 143 Programmentwurf Phasen, 406 Programmieren explorativ, 421 Programmiersprache, 153, 157 berechnungsuniversell, 27 Common Lisp, 28 deklarativ, 159 Lisp-Familie, 28 scripting language, 29 Programmierstil, 14, 689 Programmierung, 381 applikativ, 47 funktional, siehe applikativ Grundstile der Programmierung, 14 Spaghetti-Code, 15 stromorientiert, 618 von-neumann Programmierung, 14 programmierung imperativ, 636 zustandsoroentiert, 636 Prolog, 644 Fakten, 645 Klausel, 645 Regeln, 645 Prozeß baum-rekursiv, 225, 631 iterativ, 224 linear-rekursiv, 222 Prädikat Semiprädikat, 352 Prädikate Semiprädikat, 103 Präzedenzgraph, 475 Quelltyp, 85 quotient, 90 Quotierung, 75 random,
15 random-elt, 115, 117 random-real, 117 rapid prototyping, 421 rational?, 89 real?, 89 recursive subgoal problem, 425, 426 Reduktion äußere, 163 Aufwand, 164 innere, 163 Reduktionsstrategie Scheme, 165 Referentielle Transparenz, 159 Regel deklarativ, 647 oprational, 647 prozedural, 647 Regeln, 645 Rekursion Rekursiver Abstieg, 114 rekursiver Abstieg, 114 allgemein, 208 baumartig, 210 Definition, 204 endrekursiv, 224 geschachelt, 217 indirekt, 209, 415 linear, 206 minimalrekursiv, 205 Prozesse, 221 verschränkt, 209 remainder, 90 reverse, 110 Richtungsunabhängigkeit, 690 round, 90 Rucksackproblem, 309 Running around the Block Problem, 421 Rückwärtsverkettung, 647 s-expressions Lisp, 43 Schaltjahr, 99 Scheinobjektivität, 25 Schlüsselwörter, 52 scope, siehe Sichtbarkeit Segmentvariable, 357 Seiteneffekt bei Macros, 613 Seiteneffekte, 161 Semantik, 157 denotational, 690 denotationell, 158 in hybriden Sprachen, 160 operational, 158, 690 Scheme Ausdrücke, 165 strikt, 172 Semiotik, 71 Semiprädikat, 103 Definition, 352 Sequenz, 169 Sichtbarkeit, 68 Sieb des Eratosthenes, 626 Signatur einer Funktion, 60 Simulation, 487 Ablaufschema, 502 Basissystem, 498 diskret ereignisorientiert, 489 Weckermetapher, 511 Mensa-Szenario, 522 Modell, 487 Validierung, 487 Simulationsszenario, 503 sin, 90 special form define, 50 Reduktionsstrategie, 167 special form operator, 168 special form,
16 Sprachsynthese, 143 Sprunganweisung, 15, 637 sqrt, 90, 265 stack, 466 Stapel, 466 Steuerzeichen, 133 Stilistik Scheme, 130 Stream, siehe Strom Striktheit, 172 Scheme, 173 string Konkatenation, 136 string-append, 136 string-length, 136 string=?, 125 Strings, 135 Strom Generatoren, 618 Kopfform, 620 rekursive Struktur, 619 Stromfunktion, 620 Transformatoren, 618 strong typing, 86 structure, 147 sub1, 117 Substitutionsmodell, 162 Suche nicht-deterministisch, 335 super call, 483 Symbol, 71 Scheme, 74 Symbole, 74 Mehrdeutigkeit, 71 Symboltabelle, 50 Syntax, 157 Systemaufrufe, 143 tan, 90 Tangente an eine Funktion, 270 teachpack, 262 draw.ss, 214 fractals-module.ss, 214 graphing.ss, 235 gui.ss, 285 lilies-module.ss, 220 my-vector-graphics.ss, 214 show-queen.ss, 317 tools-module.ss, 116, 248 world.ss, 298 Term, siehe Ausdruck Terminalzeichen, 113 Terminierungsbeweis mymap, 220 power, 219 Testfälle, 199 trace, 119 Traversieren eines Baumes, 392 truncate, 90 Typ, 84 einer Funktion, 60 Disjunktheit, 87 elementar, 84 Funktionstyp, 84 generisch, 84 strukturiert, 84 Typisierung dynamisch, 86 statisch, 86 Typsystem latent, 86, 691 manifest, 86, 691 Umgebung, 67 global, 67 lokal, 67, 68, 281 Umlaute, 132 und/oder-bäume, 415 Unifikation, 649 Universum der Werte, 83 untrace, 119 Validierung,
17 Variable, 50 Bindung, 51 freie, 59 gebundene, 59 Lebensdauer, 69 metalinguistisch, 113 referenzieren, 50 Sichtbarkeit, 68 vector, 145 Vektoren, 145 Verarbeitungsmodell, 13, 689 Benutzermodell, 22 funktional, 18 imperativ, 15, 16 logisch, 644 mystisch, 23, 25 objektoerientiert, 17 relational, 20, 643 stromorientiert, 21 Verbund, 147 Vereinfachung, 162 Vererbung, 466, 472 Attribute, 474 Mehrfachvererbung, 473, 474 Attribute, 473 Präzedenzgraph, 475 Veretilung Exponentialverteilung, 492 Normalverteilung, 493 Vergleichsoperatoren, 94 Vergleichsprädikate =, 96 equal?, 96 Verschatten Namen, 67 Verteilung Gleichverteilung, 492 Vierfarbenproblem, 338 weak typing, 86 Webpage zur Vorlesung, 35 Weckermetapher, 511 Wert eines Terms, 161, 162 undefiniert, 169 Wiederholung, 249 Wissensrepräsentation, 406 writeln, 117 Wurzel, 113 Zebra-Rätsel, 662 Zeichen, 70, 71 ASCII, 132 Codierung, 134 druckbar, 133 Unicode, 135 Zeichenketten, 135 Zieltyp, 85 Zufallszahlen Kongruenzmethode, 495 Transformationsmethode, 496 Zufallszahlengeneratoren, 494 Zusammensetzung Listen, 102 strings, 136 Zusicherungen, 177, 179 Wahrheitswerte, 94 Wandlung Präfix-Infix,
18 Verzeichnis der Definitionen Ableitungsbaum, 113 Algorithmus, 12 Eigenschaften, 13 Implementation, 263 Auswertung verzögert, 164 vorgezogen, 164 baumartig Rekursion, 210 berechnungsuniversell, 27 Bezugstransparenz, 159 closure, 68 Curry-Verfahren, 277 Datentyp, 84 Disjunktheit der Typen, 87 Deklarative Sprache, 159 evaluation eager, 164 lazy, 164 Funktion höherer Ordnung, 234 Funktionaler Abschluß closure, 68 Funktionskomposition, 280 Kardinalität, 85 Kopfform, 620 Korrektheit, 177 partiell, 177 total, 177 Liste, 100 Macro, 608 Natürliche Zahlen, 204 Normalform eines Terms, 162 Parameter Formale und Aktualparameter, 60 Programmiersprache, 158 Prädikat Semiprädikat, 352 Referentielle Transparenz, 159 Rekursion Definition, 204 Endrekursion, 223 geschachtelt, 217 indirekt, 209 linear, 206 minimalrekursiv, 205 verschränkt, 209 Semantik Bedeutung eines Terms, 161 strikt, 172 Semiprädikat, 352 Sichtbarkeit, 68 Striktheit einer Funktion, 172 Auswertung, 172 Stromfunktion, 620 Symbol, 71 in Scheme, 74 Typsystem latent, 86 manifest, 86 Umgebung 712
19 global, 67 lokal, 67 Variable Lebensdauer, 69 Sichtbarkeit, 68 Vearbeitungsmodell, 13 Wert eines Terms,
20 Verzeichnis der Beispiele 8-Damen-Problem, 312 alle Löungen, 319 als allgemeines Backtrackingproblem, 327 Ableitungsfunktion, 237 Ackermann-Funktion, 217 amb-collect: Summanden von Sieben, 337 Anzug Aggregat Methodenkombination, 480 Backtracking CLOS, Delegation, 535 Suche in den natürlichen Zahlen, 325 allgemeines Schema, 323 nicht-deterministisch, 342 broadcast: Nachricht an alle Objekte, 533 case, 79 CLOS Queue,Schlangen, 459 broadcast, 533 Closures als Listenrepräsentation, 149 Denksportaufgabe: Missionare auf der Hängebrücke, 330 Dialog-Werkzeug allgemein, 380 Dreiecke, 78 mit contract, 182 Eliza, 362 Fakultät, 91 Fenster mit Eingabefeld, 287 Fenster mit QUIT-button, 287 Fibonacci-Zahlen baumrekursiv, 210 Fibonaccizahlen endrekursiv, 225 GPS Version 1, 413 Version 2, 430 Klötzchenwelt, 450 Labyrinthsuche, 444 Monkey and banana problem, 441 Inhalt einer Kugel, 53 Initialisierung mittels initialize, 501 Klötzchenwelt, 450 Kunden-Bediensystem, 515 Labyrinthsuche, 444 Lazy Scheme, natürliche Zahlen, 175 Listen Unterlisten, 307 Länge einer Liste endrekursiv, 224 Länge einer Liste Nachklappern, 222 Macro Mittelwert von mehreren Zahlen, 611 my-unless, 610 my-when, 610 my-while, 610 myif,
21 quasiquote, 609 Maikatzen von Storm, 300 member funktional, 128 relational, 659 Memoization, 631 Mensa-Szenario 1, 522 Modulo-Funktion geschachtelt rekursiv, 217 Monkey and banana problem, 441 Multiplikationsalgorithmus funktional, 19 imperativ, 16 Mustervergleich (pattern matching), 349 my-if Nicht-Striktheit von Kontrollstrukturen, 174 n-tes Element einer Liste, 130 Negator, 379 Newton-Verfahren allgemeines, 270 msqrt, 265 mit contract, 266 Parsing von Namen Variante 1, 129 Parsing: Vor- und Nachname, 110 Permutationen von Listenelementen, 309 Potenzieren Induktionsbeweis, 219 Prolog in Scheme Severus Snape s Rätsel, 667 Zebra-Rätsel, 662 member, 659 Prolog: Ahnentafel, 653 Pythagoras: Mein erstes Scheme- Programm, 50 Quadratwurzel, 263 Queue CLOS, Schlangen, 459 FIFO-Queue, Warteschlange, 467 LIFO-Queue, Stack, 466 Stack, 466 Rucksackproblem: Geld wechseln, 309 Schaltjahr mit Konditional, 98 mit logischen Operatoren, 100 Severus Snape s Rätsel, 667 Sieb des Eratosthenes stromorietentiert, 626 Simulation Mensa-Szenario 1, 522 Mensa-Szenario 2: Spezialisierte Essensausgaben und Gäste, 525 Basissystem, 498 Kunden-Bediensystem, 515 Strom Natürliche Zahlen, 622 Sieb des Eratosthenes, 626 Teilstücke, 624 stream-ref, 623 abbilden, 623 filtern, 623 for-each, 624 Implemetation, 622 Test cases, 200, 718 Testfälle für my-length, 201 Textaufgaben lösen, 382 Textformatierung justify, 137 Textgenerierung Adjektive und Präpositionen, 120 rekursiver Abstieg, 114 Grammatik 715
22 endliche Sprache, 112 The Name of The Song, 77 Uhr world.ss, 292 Verweben von Listen, 307 Vierfarbenproblem mit amb, 338 Wandlung von Zahlen zu Text, 138 Zebra-Rätsel, 662 Übersetzer regelbasiert,
23 Verzeichnis der Autoren Abelson, Harold, 8, 10, 34, 203, 632 Adams, Douglas, 73, 273 Aristoteles, 408 Bauer, F. L., 12 Bird, R., 7, 33, 152, 172 Bobrow, Daniel G., 382 Brinch-Hansen, Per, 253 Carroll, Lewis, 72, 77, 155, 156 Church, Alonzo, 56 Clocksin, W.F., 641 Clocksin, W. F., 34 Conan Doyle, Sir Arthur, 641 Dijkstra, E. W., 15 Frege, G., 201 Goos, G., 12 Graham, Paul, 34, 203, 277 Hoare, C. A. R., 26, 609 Hofstadter, D. R., 203 Holyer, Ian, 202, 617 Keene, S., 34 Klaus, Heinz-Günther, 637 Knuth, Donald, 494 McCarthy, John, 19, 28 McDermott, Drew, 456 Mellish, C., 641 Meschkowski, H., 204 Norvig, Peter, 7, 29, 31, 37, 56, 109, 203, 240, 609, 636, 641 Orwell, George, 125 Page, Bernd, 488 Paul Graham, 482 Press, W. H., 494 Raphael, Bertram, 154, 643 Reiser, Martin, 459, 488, 516 Rowling, J.K., 667 Schefe, Peter, 12 Schönfinkel, M., 277 Shapiro, E., 34 Shapiro, Ehud, 641 Sterling, E., 34, 641 Storm, Theodor, 211 Strube, G., 160 Sussman, Gerald, 423 Sussman, Gerald J., 8, 10, 34, 203, 632 Sussman, Julie, 8, 10, 34, 203, 632 Wadler, P., 7, 33, 152, 172 Weigert, Alfred, 99 Weizenbaum, Joseph, 24, 345 Wirth, Niklas, 84, 459, 488, 516 Zimmermann, H., 99 Zwittlinger, H., 68 Züllighoven, Heinz, 177, 204 Nagel, H.-H., 24 Newell, Alan,
24 Verzeichnis der wörtlichen Zitate Abelson und Sussmann A computer language is not just a way of getting a computer to perform operations, 10 Adams, Douglas So long and thanks for all the fish., 73 The Ultimate Question of Life, the Universe, and Everything, 273 Aristoteles Unsere Überlegung betrifft nicht das Ziel, sondern die Mittel es zu erreichen., 408 Brinch-Hansen, Per Nesting is for Birds., 253 Carroll, Lewis Jabberwocky, 156 The name of the song is called Haddocks Eyes., 77 There s a nice knock-down argument for you, 72 Conan Doyle, Sir Arthur How, in the name of good fortune, did you know all that, Mr. Holmes?, 641 Frege, G. Die Mathematik sollte eigentlich ein Muster an logischer Klarheit sein., 201 Hoare, C. A. R. One thing the language designer should not do is to include untried ideas of his own., 609 Eine unzuverlässige Programmiersprache, aus der unzuverlässige Programme hervorgehen, 26 Klaus, Heinz-Günther Satire: Man mordet nicht nach Sprungbefehl, 637 McDermott, Drew Remember GPS?, 456 Nagel, H.-H. Wer die Ergebnisse unbesehen glaubt, sollte gar nicht erst anfangen, Informatik zu studieren, 24 Newell, Alan It is not my aim to surprise or to shock you, 405 Norvig, Peter Lisp s flexibility allows it to adapt as programming styles change, 31 The first step in writing a macro, 609 The name lambda comes from the mathematician Alonzo Church, 56 You will never become proficient in a foreign language by studying vocabulary lists.,
25 Orwell, George All animals are equal, but some animals are more equal than others., 125 Press, W. H. A working, though imprecise, definition of randomness, 494 Storm, Theodor Von Katzen, 211 Weizenbaum, Joseph It is said that to explain is to explain away.,
26 Scheme-Sprachelemente :initarg, 469 :initializer, 470 :initvalue, 469 length acc, 224 string->symbol, 74 symbol->string, 74 add, 205 always, 284 amb, 335 amb-assert, 336 and, 45 apply, 240 begin, 169 big-bang, 291 call-next-method, 484 case, 79 change-class, 527 check-error, 201, 718 check-expect, 200, 201, 718 choice-index, 286 clas-cpl, 479 class-of, 468 CLOS call-next-method, 484 defclass, 460 defgeneric, 464 defmethod, 464 tell, 533 compose, 280 cond, 62 conjoin, 284 count-change, 311 create-window, 285 current-seconds, 297 date, 297 defclass, 461 defclass*, 461 defgeneric, 464 defgeneric*, 464 define, 49, 50 defmethod, 464 delay, 621 dialog-tool, 380 disjoin, 284 dolist, 611 dotimes, 611 draw-message, 286 else, 63 empty-stream?, 622 enqueue, 466 eqv?, 74 even?, 209 filter, 244 find-all, 411 find-all-not, 411 findall, 661 force, 621 general-backtracking, 323 generic-arity, 468 generic-methods, 468 graph-fun, 235 head-stream, 622 hide-window, 285 if, initialize, 501 iterate,
27 lambda, 55 let, 64, 65, 67 letrec, 249 make, 469 make-button, 286 make-choice, 286 max, 45, 240 memo, 632 mod, 217 more-specific?, 468 my-length, 222 my-reverse, 228 mymap, 206 negate, 411 newton, 271 odd?, 209 on-key-event, 291 on-redraw, 291 on-tick-event, 291 or, 45 power, 219 push, 466 quasiquote splice, 610 queue, 459 quote, 75 reduce, 246 reduce-right, 248 reverse append, 230 reverse-akk, 232 round, 237 rule-based-translator, 378 set, 166 setf, 506 show-window, 285 sim-actor, 499 sin, 45 special form define, 50 special form operator case, 79 cond, 62 else, 63 define, 49 if, lambda, 55 let, 64, 65 unless, 62 when, 62 splice quasiquote, 610 sqrt, 43, 45 stop-when, 292 stream-ref, 623 STUDENT, 382 student, 393 subclass?, 468 subs, 306, 307 symbol?, 74 tail-stream, 622 teachpack graphing.ss, 235 text-contents, 286 truncate, 237 undefined, 170 unless, 62 until, 611 untilm, 251 void, 171 void?, 171 when, 62 while, 610,
28 722
29 B Kurzreferenz: Scheme B.1 Funktionslexikon Verknüpfung von Funktionen (curry f arg1... argn) : Partielle Anwendung von f auf arg1... argn von links nach rechts (rcurry f argm... argn) : Partielle Anwendung von f, Bindung der Argumente von rechts nach links (compose f1... fn) : Funktionskomposition, Hintereinanderausführung (f1 (... (fn x))) (conjoin p1?... pn?) : Konjunktion von Prädikaten (disjoin p1?... pn?) : Disjunktion von Prädikaten (always x) : Die konstante Funktion, deren Wert unabhängig von den Argumenten x ist Idiome der funktionalen Programmierung (apply f xs) : Anwendung einer Funktion f auf eine Liste von Argumenten xs (map f xs1... xsn) : Abbilden einer oder mehrerer Listen auf die Liste der Bilder der Elemente. Die Stelligkeit der Funktion f muß mit der Anzahl der angegebenen Listen xs1... xsn usw. übereinstimmen. (filter p? xs) : Die Liste der Elemente von xs, die p? erfüllen (reduce f xs seed) : Paarweise Verknüpfung der Elemente von xs mit f, Startwert seed, (f x1 (f x2 (... (f xn seed)))) (iterate f end? start) : Die Liste der Funktionsanwendungen, bis end? erfüllt ist, (start (f start) (f (f start))...) (untilm f end? start) : Der erste Wert der Folge start, (f start), (f (f start)),... erfüllt der end? (some p? xs) : Finde das erste Element von xs, das das Prädikat p? erfüllt, ansonsten gebe #f zurück. (every p? xs) : wahr, wenn alle Elemente von xs das Prädikat p? erfüllen. (assoc key alist) : Suche in der Assoziationsliste alist das erste Paar, daß das als Kopf den Schlüssel key enthält. (rassoc key alist) : Suche in723 der Assoziationsliste alist das erste Paar, daß das als Rest den Schlüssel key enthält.
30 B.2 CLOS Klassen ( defclass <Name der Klasse> ({ <Oberklassen> }) {( <Slot> {<Slot keys> })} {<Class keys>} ) Optionen für die Attribute (slots): :initarg keyword: <key> Schlüsselwort für den Konstruktor :initializer <func> Initialisierungsfunktion :initvalue <value> Defaultwert :reader <name> Akzessorfunktion zum Lesen des Wertes :writer <name> Akzessorfunktion zum Schreiben des Wertes :accessor <name> Akzessorfunktion zum Lesen und Schreiben des Wertes :accessor <name> Akzessorfunktion zum Lesen und Schreiben des Wertes :type <type> Typdefinition für die Klasse des slots ( defgeneric <name>( { ( <arg> <class> )} {<arg> }) {:combination <combination>} { :documentation <string> } ) ( defmethod <name> [ < q u a l i f i e r > ] ( { ( <arg> <class> )} {<arg> }) { :documentation <string> } ) Ergänzungsmethoden < q u a l i f i e r > : : = : a f t e r :before :around Methodenkombinationen generic + combination g e n e r i c l i s t c o m b i n a t i o n generic min combination generic max combination generic append combination 724
31 generic append! combination generic begin combination generic and combination generic or combination B.3 Prolog-in-Scheme-Lexikon Variable:?X : Die Namen von Variablen beginnen mit einem Fragezeichen. Anonyme Variable:? : Ein Fragezeichen bezeichnet eine anonyme Variable, die in Ausgaben unterdrückt wird. Regeln: Klauseln mit Prämissen (Zielen) : <Klausel Kopf> : <Ziel 1>... <Ziel n> Negation: not : Der not-oprator negiert eine Klausel : (not <Klausel>) Ungleichheit:!= : Das!=-Prädikat ist wahr, wenn zwei Strukturen oder Variablen nicht unifizieren : (! = <struktur1> <struktur2> ) Das assert-macro: : Trage eine Klausel in die Datenbasis ein. (< <Klausel> ) Das query-macro:?- : Anfrage, durch welche Variablenbindungen die Konjunktion der Ziele in der Anfrage erfüllt werden kann. (? <Ziel 1>... <Ziel n>) findall: findall sammelt alle Resultate des Prädikatsaufrufs <Ziel> in einer Liste <Liste> als instanziierte Varianten des Ausdrucks <Term>. ( f i n d a l l <Term> <Ziel> <Liste> ) count: count zählt die Resultate des Prädikatsaufrufs <Ziel> und bindet die Anzahl an die Variable <Var>. ( count <Var> <Ziel> ) 725
32 Funktionale Auswertung: is: Das is-prädikat bindet den Wert eines funktionalen Ausdrucks an eine Variable. Alle Variablen des Ausdrucks müssen vorher an Werte gebunden sein. ( i s <Var> <Ausdruck> ) Funktionale Auswertung: test: Das test-prädikat evaluiert einen funktionalen Ausdruck. Das Prädikat ist erfüllt, wenn der Ausdruck wahr ist. Alle Variablen des Ausdrucks müssen vorher an Werte gebunden sein. ( t e s t <Ausdruck> ) 726
33 B.4 Unterschiede zwischen den Schemedialekten, DrScheme, Version Zahl der Operanden Lehresprachen: Fortgeschritten Für +,, and, or sind mindestens zwei Operanden notwendig. Sprache: F o r t g e s c h r i t t e n ; > (+ 1) procedure + : expects at l e a s t 2 arguments, given 1 : 1 > ( and #t ) and: expected at l e a s t two expressions a f t e r and... Kombo, R5RS, Module (#lang scheme): Für +,, and, or ist die Operandenzahl beliebig. Sprache: F o r t g e s c h r i t t e n ; > (+ ) 0 > (+ 1) 1 > ( ) 4 > ( and ) #t > ( and #t ) #t Lehresprachen: Fortgeschritten eval ist undefiniert. eval Sprache: F o r t g e s c h r i t t e n ; > eval reference to an i d e n t i f i e r before i t s d e f i n i t i o n : eval > ( eval 1) reference to an i d e n t i f i e r before i t s d e f i n i t i o n : eval Kombo, R5RS, Module (#lang scheme): eval ist eine Standardfunktion. Sprache: F o r t g e s c h r i t t e n ; Sprache: Kombo ; > ( eval ( cons 1 2 ) ) (1. 2) > eval # <procedure:eval> 727
Programmierparadigmen
Programmierparadigmen D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2011, 20. Juni 2011, c 2011 D.Rösner D. Rösner PGP 2011...
MehrGliederung. Programmierparadigmen. Sprachmittel in SCHEME. Objekte: Motivation. Objekte in Scheme
Gliederung Programmierparadigmen D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg 1 Einführung Sprachmittel Sommer 2011, 20. Juni 2011,
MehrFunktionale Programmierung (in Clojure)
Funktionale Programmierung (in Clojure) Einführung Burkhardt Renz Fachbereich MNI Technische Hochschule Mittelhessen Wintersemester 2014/15 Übersicht Paradigmen von Programmiersprachen Paradigmen von Programmiersprachen
MehrProbe-. Klausur zu Softwareentwicklung III: Funktionale Programmierung WS 2009/2010 Leonie Dreschler-Fischer
Probe-. Klausur zu Softwareentwicklung III: Funktionale Programmierung WS 2009/2010 Leonie Dreschler-Fischer Note: und Begründung: Hamburg, Unterschrift (Prüferin) Rechtsmittelbelehrung: Gegen die Bewertung
MehrProgrammieren Formulierung eines Algorithmus in einer Programmiersprache
Zum Titel der Vorlesung: Programmieren Formulierung eines in einer Programmiersprache Beschreibung einer Vorgehensweise, wie man zu jedem aus einer Klasse gleichartiger Probleme eine Lösung findet Beispiel:
MehrEinfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at
Inhalt SWP Funktionale Programme (2. Teil) Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at Interpreter für funktionale Sprache
MehrBinäre Suchbäume (binary search trees, kurz: bst)
Binäre Suchbäume (binary search trees, kurz: bst) Datenstruktur zum Speichern einer endlichen Menge M von Zahlen. Genauer: Binärbaum T mit n := M Knoten Jeder Knoten v von T ist mit einer Zahl m v M markiert.
MehrVBA-Programmierung: Zusammenfassung
VBA-Programmierung: Zusammenfassung Programmiersprachen (Definition, Einordnung VBA) Softwareentwicklung-Phasen: 1. Spezifikation 2. Entwurf 3. Implementierung Datentypen (einfach, zusammengesetzt) Programmablaufsteuerung
MehrEinführung in das Programmieren Prolog Sommersemester 2006. Teil 2: Arithmetik. Version 1.0
Einführung in das Programmieren Prolog Sommersemester 2006 Teil 2: Arithmetik Version 1.0 Gliederung der LV Teil 1: Ein motivierendes Beispiel Teil 2: Einführung und Grundkonzepte Syntax, Regeln, Unifikation,
MehrWas ist Logische Programmierung?
Was ist Logische Programmierung? Die Bedeutung eines Computer-Programms kann durch Logik erklärt werden. Die Idee der logischen Programmierung besteht darin, die Logik eines Programms selber als Programm
MehrMethoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR.
Methoden zur Interpretation LISPähnlicher Programmiersprachen Seminarvortrag 20.01.2017 FACHBEREICH 9 TOBIAS STUMM MATR.-NR. 4012917 1 Inhalt Motivation Lisp > Definition > Scheme Interpreter > Definition
MehrProgrammieren Lernen mit BYOB. Gerald Futschek 5. November 2012
Programmieren Lernen mit BYOB Informatiktag 2012 Gerald Futschek 5. November 2012 Erste Programmier Schritte in der Schule Sehr viele verschiedene Dinge zu lernen: Syntax und Semantik der Befehle, Algorithmen,
MehrFunktionale Programmierung
FP-1.0 Funktionale Programmierung Prof. Dr. Uwe Kastens SS 2013 Vorlesung Funktionale Programmierung SS 2013 / Folie 100 Begrüßung Functional Programming is Fun FP-1.1 Fun ctional Programming is Fun ctional
MehrGrundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen
Grundlagen der Programmierung Prof. H. Mössenböck 3. Verzweigungen If-Anweisung n > 0? j n if (n > 0) x = x / n; ohne else-zweig x x / n j max x x > y? n max y if (x > y) max = x; else max = y; mit else-zweig
MehrGrundbegriffe der Informatik
Grundbegriffe der Informatik Einheit 15: Reguläre Ausdrücke und rechtslineare Grammatiken Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Wintersemester 2008/2009 1/25 Was kann man mit endlichen
MehrRevised Report on the Algorithmic Language SCHEME
Revised Report on the Algorithmic Language SCHEME Entwickler Guy Lewis Steele Jr. Gerald J. Sussman 1975 MIT Spezifikationen IEEE Standard RnRS (R5RS) LISP Scheme Common Lisp Emacs Lisp Mac Lisp InterLisp
MehrFragen. f [ ] = [ ] f (x : y : ys) = x y : f ys f (x : xs) = f (x : x : xs) Wozu evaluiert f [1, 2, 3] (Abkürzung für f (1 : 2 : 3 : [ ]))?
Fragen f [ ] = [ ] f (x : y : ys) = x y : f ys f (x : xs) = f (x : x : xs) Wozu evaluiert f [1, 2, 3] (Abkürzung für f (1 : 2 : 3 : [ ]))? Wozu evaluiert [f [ ], f [ ]]? Weiteres Beispiel: f [ ] y = [
Mehr1. Einführung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi
1. Einführung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Einführung in
MehrJava Kurs für Anfänger Einheit 5 Methoden
Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden
MehrEntwurf von Algorithmen - Kontrollstrukturen
Entwurf von Algorithmen - Kontrollstrukturen Eine wichtige Phase in der Entwicklung von Computerprogrammen ist der Entwurf von Algorithmen. Dieser Arbeitsschritt vor dem Schreiben des Programmes in einer
Mehr26 Hierarchisch strukturierte Daten
Algorithmik II Peter Wilke Sommersemester 2005 Teil III Funktionale Programmierung 26 Hierarchisch strukturierte Daten Peter Wilke Algorithmik II Sommersemester 2005 1 Peter Wilke Algorithmik II Sommersemester
MehrErwin Grüner 09.02.2006
FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife
MehrIT-Basics 2. DI Gerhard Fließ
IT-Basics 2 DI Gerhard Fließ Wer bin ich? DI Gerhard Fließ Telematik Studium an der TU Graz Softwareentwickler XiTrust www.xitrust.com www.tugraz.at Worum geht es? Objektorientierte Programmierung Konzepte
MehrInformatikgrundlagen (WS 2015/2016)
Informatikgrundlagen (WS 2015/2016) Klaus Berberich (klaus.berberich@htwsaar.de) Wolfgang Braun (wolfgang.braun@htwsaar.de) 0. Organisatorisches Dozenten Klaus Berberich (klaus.berberich@htwsaar.de) Sprechstunde
MehrKontrollstrukturen - Universität Köln
Kontrollstrukturen - Universität Köln Mario Manno Kontrollstrukturen - Universität Köln p. 1 Was sind Sprachen Auszeichnungssprachen HTML, XML Programmiersprachen ASM, Basic, C, C++, Haskell, Java, Pascal,
MehrFunktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel
MehrJavakurs 2013 Objektorientierung
Javakurs 2013 Objektorientierung Objektorientierte Programmierung I Armelle Vérité 7 März 2013 Technische Universität Berlin This work is licensed under the Creative Commons Attribution-ShareAlike 3.0
MehrGliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik
Informatik I WS 2012/13 Tutorium zur Vorlesung 1. Alexander Zietlow zietlow@informatik.uni-tuebingen.de Wilhelm-Schickard-Institut für Informatik Eberhard Karls Universität Tübingen 11.02.2013 1. 2. 1.
MehrProseminar "Grundlagen höherer Programmiersprachen" Wintersemester 2002/03 (Kröger, Rauschmayer) Logikprogrammierung
Proseminar "Grundlagen höherer Programmiersprachen" Wintersemester 2002/03 (Kröger, Rauschmayer) Logikprogrammierung Verfasser: Bettina Hikele 3. Semester Informatik EMail: bettyx@arcor.de Einführung in
MehrWas ist ein Compiler?
Was ist ein Compiler? Was ist ein Compiler und worum geht es? Wie ist ein Compiler aufgebaut? Warum beschäftigen wir uns mit Compilerbau? Wie ist die Veranstaltung organisiert? Was interessiert Sie besonders?
MehrWas bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):
Was bisher geschah deklarative Programmierung funktional: Programm: Menge von Termgleichungen, Term Auswertung: Pattern matsching, Termumformungen logisch: Programm: Menge von Regeln (Horn-Formeln), Formel
MehrGrundlagen von Python
Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren
MehrJava: Vererbung. Teil 3: super() www.informatikzentrale.de
Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und
MehrProgrammieren in Haskell Einführung
Programmieren in Haskell Einführung Peter Steffen Universität Bielefeld Technische Fakultät 16.10.2009 1 Programmieren in Haskell Veranstalter Dr. Peter Steffen Raum: M3-124 Tel.: 0521/106-2906 Email:
MehrFunktionale Programmierung
Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 2 Teil II Typen mit Werten und Ausdruck, sogar listenweise 3 Haskell Programme Programm Module ein
MehrPrinzipien Objektorientierter Programmierung
Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................
MehrEinführung in die Programmiertechnik
Einführung in die Programmiertechnik Funktionale Programmierung: Scheme Grundlagen funktionaler Programmierung Idee: Zu lösendes Problem wird als mathematische Funktion formuliert Beispiel Rechtschreibprüfung:
MehrGrundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny
Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.
MehrProgrammierkurs Java
Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen
MehrE-PRIME TUTORIUM Die Programmiersprache BASIC
E-PRIME TUTORIUM Die Programmiersprache BASIC BASIC Beginner s All-purpose Symbolic Instruction Code symbolische Allzweck-Programmiersprache für Anfänger Design-Ziel klar: Eine einfache, für Anfänger geeignete
MehrThe B Method. B ist eine Methode zur Spezifikation zum Entwurf zur Implementierung von Software Systemen. Bücher zur B-Methode
The B Method B ist eine Methode zur Spezifikation zum Entwurf zur Implementierung von Software Systemen. Bücher zur B-Methode P. Schmitt: Formal Specification and Verification of Software p.1 The B Method
MehrPraktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom 10.11.2010: Rekursive Datentypen
Rev. 1152 1 [23] Praktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom 10.11.2010: Rekursive Datentypen Christoph Lüth & Dennis Walter Universität Bremen Wintersemester 2010/11
MehrVorkurs C++ Programmierung
Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:
MehrLISP. Eine Einführung
LISP Eine Einführung 5. OBERFLÄCHLICHES Übersicht 2 5.1 Verschiedenes zum letzten Aufgabenblatt 5.2 Geschwister und Komponenten oder wie finde ich was 5.3 on-click-methoden und on-change-methoden 5.1 Musterlösung
Mehr1 Inhalt der Vorlesung B-PS1
1 Inhalt der Vorlesung B-PS1 1.1 Tag 1 1.1.1 Vormittag Geschichte der Programmiersprachen Wie viele Programmiersprachen gibt es? https://en.wikipedia.org/wiki/list_of_programming_languages Esoterische
MehrMai 2006. Hauptseminar: Nichtrelationale Datenbanken Historisch-Kulturwissenschaftliche Informationsverarbeitung Universität zu Köln
Hauptseminar: Nichtrelationale Historisch-Kulturwissenschaftliche Informationsverarbeitung Universität zu Köln Mai 2006 Was ist eine Datenbank? Erweiterung relationaler um eine Deduktionskomponente Diese
MehrAlgorithmen mit Python
Algorithmen mit Python Vorbesprechung zum Proseminar im Sommersemester 2009 http://www.python.org 1 Sie lernen in DAP Java und C/C++: 80% Syntax, 20% Algorithmen-Design Idee Schon ein einfaches Hello World
MehrObjektorientierte Programmierung für Anfänger am Beispiel PHP
Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten
Mehrhttps://portal.microsoftonline.com
Sie haben nun Office über Office365 bezogen. Ihr Account wird in Kürze in dem Office365 Portal angelegt. Anschließend können Sie, wie unten beschrieben, die Software beziehen. Congratulations, you have
MehrTheoretische Grundlagen des Software Engineering
Theoretische Grundlagen des Software Engineering 11: Abstrakte Reduktionssysteme schulz@eprover.org Reduktionssysteme Definition: Reduktionssystem Ein Reduktionssystem ist ein Tupel (A, ) Dabei gilt: A
MehrGrundlagen der Programmierung (Vorlesung 14)
Grundlagen der Programmierung (Vorlesung 14) Ralf Möller, FH-Wedel Vorige Vorlesung Verifikation von Anweisungen und Anweisungsfolgen Schleifen Inhalt dieser Vorlesung Funktionen und Prozeduren Lernziele
MehrIntroduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016
to to May 2016 to What is Programming? All computers are stupid. All computers are deterministic. You have to tell the computer what to do. You can tell the computer in any (programming) language) you
MehrProgrammieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff
Programmieren in C Macros, Funktionen und modulare Programmstruktur Prof. Dr. Nikolaus Wulff Der C Präprozessor Vor einem Compile Lauf werden alle Präprozessor Kommandos/Makros ausgewertet. Diese sind
MehrFormale Spezialisierungstechniken. am Beispiel des binären Baums. Hybride Programmiersprachen Daniel Krompass Berlin, 2009
Formale Spezialisierungstechniken am Beispiel des binären Baums. Hybride Programmiersprachen Daniel Krompass Berlin, 2009 Spezialisierungsarten (Typbeziehungen erster Art) X stellt Methoden und Eigenschaften
MehrComputeranwendung und Programmierung (CuP)
Computeranwendung und Programmierung (CuP) VO: Peter Auer (Informationstechnologie) UE: Norbert Seifter (Angewandet Mathematik) Organisatorisches (Vorlesung) Vorlesungszeiten Montag 11:15 12:45 Freitag
MehrVererbung & Schnittstellen in C#
Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung
MehrGrammatiken. Einführung
Einführung Beispiel: Die arithmetischen Ausdrücke über der Variablen a und den Operationen + und können wie folgt definiert werden: a, a + a und a a sind arithmetische Ausdrücke Wenn A und B arithmetische
MehrObjects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0
Objects First With Java A Practical Introduction Using BlueJ Mehr über Vererbung Exploring polymorphism 1.0 Zentrale Konzepte dieses Kapitels Methoden-Polymorphie statischer und dynamischer Typ Überschreiben
MehrProgrammierparadigmen. Programmierparadigmen. Imperatives vs. objektorientiertes Programmieren. Programmierparadigmen. Agenda für heute, 4.
Agenda für heute, 4. Mai, 2006 Programmierparadigmen Imperative Programmiersprachen In Prozeduren zusammengefasste, sequentiell ausgeführte Anweisungen Die Prozeduren werden ausgeführt, wenn sie als Teil
MehrLogische Programmierung
Logische Programmierung B-82 Deklaratives Programmieren in Prädikatenlogik: Problem beschreiben statt Algorithmus implementieren (idealisiert). Grundlagen: Relationen bzw. Prädikate (statt Funktionen);
MehrSoftware Engineering Klassendiagramme Assoziationen
Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen
MehrEinführung in die Java- Programmierung
Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113
MehrC/C++ Programmierung
1 C/C++ Programmierung Grundlagen: Anweisungen Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010 2 Anweisungen (Statements)
Mehr1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik
MehrKlausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007
Fachhochschule Bonn-Rhein-Sieg University of Applied Sciences Fachbereich Informatik Prof. Dr. Peter Becker Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007
Mehrvii 4 t.scheme: Funktionale Programmierung Funktionen als Daten erster Klasse
Inhaltsverzeichnis Einleitung 1 Kaffee oder Tee?................................ 1 Die t.sprachen.................................. 2 Die Java-Implementierung........................... 5 Ockhams Rasiermesser.............................
MehrZusammenfassung. Satz. 1 Seien F, G Boolesche Ausdrücke (in den Variablen x 1,..., x n ) 2 Seien f : B n B, g : B n B ihre Booleschen Funktionen
Zusammenfassung Zusammenfassung der letzten LV Einführung in die Theoretische Informatik Woche 6 Harald Zankl Institut für Informatik @ UIBK Wintersemester 2014/2015 Satz 1 Seien F, G Boolesche Ausdrücke
MehrProgrammieren in COMMON LISP
Programmieren in COMMON LISP von Prof. Dr. Otto Mayer Universität Kaiserslautern Wissenschaftsverlag Mannheim/Wien/Zürich INHALTSVERZEICHNIS 0 EINLEITUNG 0.1 Entwicklung und Bedeutung von LISP 0.2 Ziele
Mehrt r Lineare Codierung von Binärbbäumen (Wörter über dem Alphabet {, }) Beispiel code( ) = code(, t l, t r ) = code(t l ) code(t r )
Definition B : Menge der binären Bäume, rekursiv definiert durch die Regeln: ist ein binärer Baum sind t l, t r binäre Bäume, so ist auch t =, t l, t r ein binärer Baum nur das, was durch die beiden vorigen
MehrSemantik von Formeln und Sequenzen
Semantik von Formeln und Sequenzen 33 Grundidee der Verwendung von Logik im Software Entwurf Syntax: Menge von Formeln = Axiome Ax K ist beweisbar Formel ϕ beschreiben Korrektkeit Vollständigkeit beschreibt
MehrWAS IST DER KOMPARATIV: = The comparative
DER KOMPATATIV VON ADJEKTIVEN UND ADVERBEN WAS IST DER KOMPARATIV: = The comparative Der Komparativ vergleicht zwei Sachen (durch ein Adjektiv oder ein Adverb) The comparative is exactly what it sounds
MehrPragmatik von Programmiersprachen
Pragmatik von Programmiersprachen Im Kontext der Notation von Quelltexten Mike Becker, 11. Dezember 2014 Szenario: IT Dienstleister Unternehmen: Produkte: Kunden: IT Dienstleistung Beratung und Software
MehrKlausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.
Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 Klausurteilnehmer Name: Matrikelnummer: Wichtige Hinweise Es sind keinerlei Hilfsmittel zugelassen auch keine Taschenrechner! Die Klausur dauert
MehrDaniel Warneke warneke@upb.de 08.05.2006. Ein Vortrag im Rahmen des Proseminars Software Pioneers
Design Patterns Daniel Warneke warneke@upb.de 08.05.2006 Ein Vortrag im Rahmen des Proseminars Software Pioneers Design Patterns 1/23 Übersicht Einleitung / Motivation Design Patterns Beispiele Rolle des
MehrProgrammierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester 2012. hack@cs.uni-saarland.de. boesche@cs.uni-saarland.
1 Programmierung 2 Übersetzer: Code-Erzeugung Sebastian Hack hack@cs.uni-saarland.de Klaas Boesche boesche@cs.uni-saarland.de Sommersemester 2012 Bytecodes Der Java Übersetzer erzeugt keine Maschinensprache
MehrObjektorientierte Programmierung OOP
Objektorientierte Programmierung OOP Objektorientierte Programmierung OOP Ronja Düffel WS2012/13 08. Oktober 2013 Objektorientierte Programmierung OOP Objektorientierte Programmierung Objektorientierte
MehrEinführung in die Programmierung
Name, Vorname Matrikelnummer Probeklausur zur Vorlesung Einführung in die Programmierung WS 2008/09 Dauer: 2 Stunden Hinweise: Schreiben Sie Ihren Namen und Ihre Matrikelnummer auf dieses Deckblatt und
Mehr4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.
Binäre Bäume Definition: Ein binärer Baum T besteht aus einer Menge von Knoten, die durch eine Vater-Kind-Beziehung wie folgt strukturiert ist: 1. Es gibt genau einen hervorgehobenen Knoten r T, die Wurzel
MehrListening Comprehension: Talking about language learning
Talking about language learning Two Swiss teenagers, Ralf and Bettina, are both studying English at a language school in Bristo and are talking about language learning. Remember that Swiss German is quite
MehrProgrammieren Tutorium
Programmieren Tutorium Tom Schildhauer Tutorium 12 Universität Karlsruhe (TH) Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by Tom Schildhauer,
MehrEinführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005
Einführung in die objektorientierte Programmierung mit Java Klausur am 19. Oktober 2005 Matrikelnummer: Nachname: Vorname: Semesteranzahl: Die Klausur besteht aus drei Frageblöcken zu den Inhalten der
MehrDatentypen. Agenda für heute, 4. März, 2010. Pascal ist eine streng typisierte Programmiersprache
Agenda für heute, 4. März, 2010 Zusammengesetzte if-then-else-anweisungen Datentypen Pascal ist eine streng typisierte Programmiersprache Für jeden Speicherplatz muss ein Datentyp t (Datenformat) t) definiert
MehrTerme stehen für Namen von Objekten des Diskursbereichs (Subjekte, Objekte des natürlichsprachlichen Satzes)
Prädikatenlogik Man kann den natürlichsprachlichen Satz Die Sonne scheint. in der Prädikatenlogik beispielsweise als logisches Atom scheint(sonne) darstellen. In der Sprache der Prädikatenlogik werden
MehrInhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.
1. Einführung in die Informatik Inhalt 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele Peter Sobe 1 Darstellung von Algorithmen Aus den Einführungsbeispielen und
MehrContents. Interaction Flow / Process Flow. Structure Maps. Reference Zone. Wireframes / Mock-Up
Contents 5d 5e 5f 5g Interaction Flow / Process Flow Structure Maps Reference Zone Wireframes / Mock-Up 5d Interaction Flow (Frontend, sichtbar) / Process Flow (Backend, nicht sichtbar) Flow Chart: A Flowchart
MehrAlgorithmen & Datenstrukturen 1. Klausur
Algorithmen & Datenstrukturen 1. Klausur 7. Juli 2010 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 35 2 30 3 30 4 15 5 40 6 30 Gesamt 180 1 Seite 2 von 14 Aufgabe 1) Programm Analyse
MehrErweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:
VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt
MehrProgrammieren I. Kapitel 7. Sortieren und Suchen
Programmieren I Kapitel 7. Sortieren und Suchen Kapitel 7: Sortieren und Suchen Ziel: Varianten der häufigsten Anwendung kennenlernen Ordnung Suchen lineares Suchen Binärsuche oder Bisektionssuche Sortieren
MehrKapitel 11: Wiederholung und Zusammenfassung
Wiederholung und Zusammenfassung 1: Begriff und Grundprobleme der Informatik Begriff Informatik Computer als universelle Rechenmaschine Grenzen der Berechenbarkeit Digitalisierung Problem der Komplexität
MehrSEP 114. Design by Contract
Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit
Mehr1 Mathematische Grundlagen
Mathematische Grundlagen - 1-1 Mathematische Grundlagen Der Begriff der Menge ist einer der grundlegenden Begriffe in der Mathematik. Mengen dienen dazu, Dinge oder Objekte zu einer Einheit zusammenzufassen.
MehrVerhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...
PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:
MehrAusarbeitung des Interpreter Referats
Ausarbeitung des Interpreter Referats Gliederung 1. Programmiersprache 1.2. Syntax 1.2.1. Konkrete Syntax 1.2.2. Abstrakter Syntax Baum (Abstrakte Syntax) 2. Parser 2.1. Syntaktische Struktur einer Sprache
MehrDie Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten.
4.5.5 Rekursive Typen Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten. datatype IntList = Nil Cons o f ( i n t IntList ) ; Damit
MehrDie Kunst des Programmierens...
Die Kunst des Programmierens... Wo die Kosten anfallen Der Mythos Wiederverwendung: Design für Wartung als eigentliches Ziel, Objekt Spektrum 4/2009 software maintainers sped 45 percent of their time seeking
MehrDynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München
Kapitel 4 Dynamisches SQL Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München 2008 Thomas Bernecker, Tobias Emrich unter Verwendung der Folien des Datenbankpraktikums aus dem Wintersemester
MehrRobot Karol für Delphi
Robot Karol für Delphi Reinhard Nitzsche, OSZ Handel I Version 0.1 vom 24. Januar 2003 Zusammenfassung Nach der Einführung in die (variablenfreie) Programmierung mit Robot Karol von Freiberger und Krško
MehrMathematische Grundlagen der Informatik 2
Zusammenfassung Math2I Mathematische Grundlagen der Informatik 2 Emanuel Duss emanuel.duss@gmail.com 12. April 2013 1 Zusammenfassung Math2I Mathematische Grundlagen der Informatik 2 Dieses Dokument basiert
Mehr1. Übung zu "Numerik partieller Differentialgleichungen"
1. Übung zu "Numerik partieller Differentialgleichungen" Simon Gawlok, Eva Treiber Engineering Mathematics and Computing Lab 22. Oktober 2014 1 / 15 1 Organisatorisches 2 3 4 2 / 15 Organisatorisches Ort:
Mehr