* “Principles of Programming Languages” (PoPL), SS2012 * Dauer ~ 30min * Prüfer: Ronald Veldema * Beisitzer: Michael Philippsen Vll hilfreich: Eine MindMap mit den zusammengefassten Inhalten im {{:pruefungen:hauptstudium:ls2:popl_mindmap.pdf|PDF}} und {{:pruefungen:hauptstudium:ls2:popl_mindmap.mm|FreeMind}}-Format ====== Prüfling 1 ====== P: was ist Lieblingssprache, wo kennen sie sich gut aus?\\ S: Haskell P: was ist eine Monade?\\ S: Data und Metadaten mit unit und bind function P: Was macht Logiksprachen aus?\\ S: clause und fact P: Prolog - wie schreibe ich "Ronald und Michael sind reich, wer reich ist hat viele Fahrräder wie in Prolog?"\\ S: reich(roland). reich(michael). bikes(X) :­- reich(X). P: wie sieht eine anfrage aus? wie können sie eine liste aller Menschen mit Fahrräder ausgeben?\\ S: unifikation und backtracking P: Wie geht Constraint programming\\ S: x = 3 y = x + 1 P: Wie geht Data­Flow programming\\ S: a = 5 b = a + 1 P: Sie haben Klasse liste und node, implementieren sie add(node) (am anfang der liste) mittels duck typing\\ S: class list { add(Node n) { n.next = h h = n } } ====== Prüfling 2 ====== P:­ Was ist ihre Lieblingsprogrammiersprache? \\ S: Java, Go (ganz gut) P: was ist Introspection?\\ S: Reflections! P: Was kann man damit machen?\\ S: Meta informationen zu den Klassen / Objekten einholen P: Was sind delegates? S verpeilts, antwort ist funktionspointer P: C-Präprozessor #define x y void test() { int x = 5; #if x == 5 y++ #endif } Ist y++ im resultierenden Code? P: Funktional: was ist das? "ich definiere mir mal globale variable x" \\ S: gibt keine globale Variablen P: Wie sind Listen aufgebaut?\\ S: rekursiv definiert P: Programmieren sie eine Funktion (Syntax egal) die zählt wie oft der String "ronald" in einer Liste enthalten ist P: Was ist ducktyping?\\ S: "if it walks like a duck, if it quacks like a duck, its a duck" P: da Python bei der Erklärung erwähnt, wie läuft das konkret bei Python? Beispiel verkettete liste, programmieren sie mal, Klassen: Node, List\\ S hat hier etwas gehangen weil er sich nicht zu 100% sicher war ob man die Instanzvariablen von einem Objekt (hier next referenz) explizit bei der Definition von der Node-Klasse angeben muss. P: logisch, wie funktioniert eine Anfrage?\\ S: Fakten und Regeln P: konkret - wenn man viele Fahrräder hat, dann ist man reich (aufschreiben ) viele_fahrraeder(X) :­ reich(X). reich(ronald). reich(michael). P: skizzieren sie was bei der Anfrage passiert \\ S erklärt Backtracking P: was ist Unification? //Das war's dann auch schon, war relativ langsam bei den Erklärungen → nicht alle Fragen konnten gestellt werden, daher nur 2.0 alles in allem mehr konkrete Abläufe als nur die Idee dahinter!//