288 research outputs found

    Analysing equivalence of expressions in a non-strict functional programming language

    Get PDF
    Gegenstand der Arbeit ist ein Gleichheitskalkül für den Kern einer nicht-strikten funktionalen Programmiersprache. Funktionale Programmiersprachen unterstützen bestens die Prinzipien Abstraktion, Einkapselung, Hierarchiesierung und Modularisierung, die gemeinhin als Grundelemente des Software-Engineering betrachtet werden. Darüber hinaus bieten funktionale Programmiersprachen aufgrund ihrer Entwicklung aus dem Lambda-Kalkül eine große Nähe zu mathematischen Modellen. Daher besitzen sie im Bereich der Programmverifikation ausgeprägte Vorteile gegenüber imperativen oder objekt-orientierten Programmiersprachen. In der Arbeit wird nun ein Gleichheitsbegriff für Ausdrücke in funktionalen Programmiersprachen entwickelt und dessen Praktikabilität durch die Implementierung eines Beweisers untermauert. Dieser Gleichheitsbegriff ist die kontextuelle Gleichheit, die Ausdrücke aufgrund ihres Terminierungsverhaltens als Unterprogramme in allen möglichen Kontexten einordnet. Kontextuelle Gleichheit wird in Kapitel 2 vorgestellt, nachdem der klassische und der sogenannte "lazy" Lambda-Kalkül eingeführt wurden. Kapitel 3 enthält einen Überblick über die funktionale Programmierung, da auch die Implementierung des o.g. Beweisers in einer funktionalen Programmiersprache, nämlich Haskell, durchgeführt wird. In Kapitel 4 wird die funktionale Kernsprache, die Gegenstand der Untersuchung sein wird, beschrieben. Sie enthält alle wesentlichen Elemente wie z.B. Funktionsdefinition und -anwendung sowie Datentypen. Im selben Kapitel wird auch der Gleichheitsbegriff für diese Kernsprache definiert. Kapitel 5 schließlich entwickelt auf Basis der zuvor erfolgten Definitionen einen Kalkül für den Gleichheitsbeweis. Außerdem wird in diesem Kapitel auch die Umsetzung dieses Gleichheitskalküls präsentiert. Aus der Dissertation von Marko Schütz werden hierbei Erkenntnisse über die Kontextanalyse verwendet, um erfüllende Belegungen von freien Variablen zu berechnen. Die Arbeit schließt mit Beispielanalysen und Meßwerten sowie einer Diskussion der Ergebnisse und möglicher Erweiterungen

    Hat Kybernetik etwas mit Psychologie zu tun?

    Get PDF

    Realisierung der Ein-/Ausgabe in einem Compiler fur Haskell bei Verwendung einer nichtdeterministischen Semantik

    Get PDF
    Funktionale Programmiersprachen weisen viele Eigenschaften auf, die zur modernen Softwareentwicklung benotigt werden: Zuverlässigkeit, Modularisierung, Wiederverwendbarkeit und Verifizierbarkeit. Als schwer vereinbar mit diesen Sprachen stellte sich die Einbettung von Seiteneffekten in diese Sprachen heraus. Nach einigen mehr oder weniger gescheiterten Ansätzen hat sich mittlerweile fur die nichtstrikte funktionale Sprache Haskell der monadische Ansatz durchgesetzt, bei dem die Seiteneffekte geschickt verpackt werden, so dass zumindest IO-behaftete Teile eines Haskell-Programms dem klassischen imperativen Programmierstil ähneln. S. Peyton Jones bringt dieses in [Pey01, Seite 3] auf den Punkt, indem er schreibt "...Haskell is the world's finest imperative programming language." Dies ist einerseits vorteilhaft, denn die klassischen Programmiertechniken können angewendet werden, andererseits bedeutet dies auch eine Rückkehr zu altbekannten Problemen in diesen Sprachen: Der Programmcode wird unverständlicher, die Wiederverwendbarkeit von Code verschlechtert sich, Änderungen im Programm sind aufwendig. Zudem erscheint die monadische Programmierung teilweise umständlich. Deshalb wurde im Zuge der Entwicklung in fast jede Implementierung von Haskell ein Konstrukt eingebaut, dass von monadischem IO zu direktem IO führt. Da dieses nicht mit dem bisherigen Ansatz vereinbar schien, wird es als "unsafe" bezeichnet, die entsprechende Funktion heißt "unsafePerformIO". Zahlreiche Anwendungen benutzten diese Funktion, teilweise scheint die Verwendung zumindest aus Effizienzgründen unabdingbar. Allerdings ist die Frage, wann dieses verwendet werden darf, d.h. so angewendet wird, dass es nicht "unsicher" ist, nur unzureichend geklärt. Das Zitat in Abbildung 1.1 gibt wenig Aufschluss über die korrekte Anwendung, zumal immer wieder Diskussionen entstehen, ob die Verwendung von unsafePerformIO in diesem oder jenem Spezialfall korrekt ist

    Untersuchungen zu einigen Problemklassen des Context-Matching und Implementierung ausgewählter Algorithmen in der funktionalen Programmiersprache Haskell

    Get PDF
    In dieser Diplomarbeit wurde zunächst eine Einführung in das Gebiet der Unifikationstheorie gegeben, um dann zum Teilgebiet des Kontextmatchings zu kommen. Dieses wurde in das Gesamtgebiet der Unifikation eingeordnet. In Anlehnung an [Schm2003] wurde die Komplexität einiger Einschränkungen des Kontextmatchings betrachtet. Insbesondere wurde ein Algorithmus zur Lösung linearer Kontextmatchingprobleme in polynomieller Zeit vorgestellt. Es folgte die Einführung des Transformationsalgorithmus aus [Schm2003] zur Lösung allgemeiner Kontextmatchingprobleme, wobei nach und nach verbesserte Transformationsregeln für einzelne spezielle Problemsituationen vorgestellt wurden. Über [Schm2003] hinausgehend wurden die Regeln Split: Korrespondierende Lochpfade und Konstantenelimination vorgestellt. Im Rahmen der Diplomarbeit wurden die genannten Algorithmen in der funktionalen Programmiersprache Haskell implementiert, wobei auf eine einfache Erweiterbarkeit um neue Transformationsregeln sowie alternative Heuristiken zur Auswahl der in einem Schritt anzuwendenden Transformationsregel geachtet wurde. Die Implementierung (und damit auch die in ihr implementierten Algorithmen) wurde mit Hilfe von zufällig erzeugten Termen auf ihre Leistungsfähigkeit getestet. Hauptaugenmerk lag dabei darauf, inwiefern sich Regeln, die über die Basisregeln aus Tabelle 3.4.1 hinausgehen, positiv auf die Anzahl der Transformationsschritte auswirken. Das Ergebnis ist beeindruckend: durch die Einführung komplexerer Transformationsregeln ließen sich in unseren Testfällen bis zu 87% der Transformationsschritte einsparen, im Durchschnitt immerhin noch 83%. Speziell komplexere Kontextmatchingprobleme mit einer größeren Anzahl an Kontextvariablen profitieren hiervon. Insbesondere die Erkennung korrespondierender Positionen in Verbindung mit der Regel Split führte zu erheblichen Verbesserungen. Die implementierten Algorithmen zur Erkennung korrespondierender Positionen stellen teilweise nur ein notwendiges Kriterium für die Existenz korrespondierender Löcher dar. Dies kann zu fehlerhaften Erkennungen solcher Positionen führen. Wie sich in unseren Tests zeigte, scheint das jedoch kein gravierendes Problem zu sein, da die entsprechenden Split- Transformationen ohnehin äußerst sparsam eingesetzt werden

    Hat Kybernetik etwas mit Psychologie zu tun?

    Get PDF

    Die Zukunft des MINT-Lernens – Band 1

    Get PDF
    Dieser Open-Access-Sammelband stellt Perspektiven auf digitalen MINT-Unterricht und die Lehrkräftebildung der Zukunft dar. Auf Grundlage aktueller Forschungsergebnisse beantwortet er aktuelle Fragestellungen, etwa: Welche Kompetenzen und welche Lerninhalte werden für die Herausforderungen von morgen benötigt und welchen Beitrag können die MINT-Fächer dazu leisten? Inwiefern kann die Digitalisierung bei einem Lernen für die Zukunft unterstützen bzw. ist sie notwendiger Bildungsinhalt für zukünftiges Handeln? Welche digitalen Technologien, digitalen Werkzeuge und digitalen Lernumgebungen können bei der Entwicklung von 21st Century Skills bei Lernenden beitragen? Wie müssen sie ausgestaltet sein, um beim Lernen und Problemlösen unterstützend zu wirken und die Lernenden zum kritischen Denken (Critical Thinking) anzuregen? Wie kann eine Diagnostik mit digitalen Methoden aussehen? Was folgt aus all dem für die MINT-Lehrkräftebildung? Der vorliegende erste Band ist Teil eines zweibändigen Sammelwerks; die beiden Bände sind weitgehend unabhängig voneinander lesbar und unterscheiden sich in ihrem inhaltlichen Fokus: Während Band 1 grundsätzliche Perspektiven beleuchtet, fokussiert Band 2 eher auf konkrete digitale Tools und Methoden für die Unterrichtspraxis. Die Beiträge wurden im Rahmen des Projekts „Die Zukunft des MINT-Lernens – Denkfabrik für Unterricht mit digitalen Technologien“, gefördert durch die Deutsche Telekom Stiftung, entwickelt. Sie decken verschiedene (assoziierte) Projekte des Entwicklungskonsortiums der beteiligten Hochschulstandorte ab und bieten zukunftsweisendes Wissen zum Thema

    Inkrementelles und interaktives Lernen von Handlungswissen für Haushaltsroboter

    Get PDF

    Modding als Einstieg in die Videospielbranche. Sollten Entwicklerfirmen die Kreation von Community-Erstellten-Inhalten mehr fördern?

    Get PDF
    Diese Arbeit untersucht Modifikationen für Videospiele und gibt Einblicke in deren Entwicklung – von der Konzeption bis zum fertigen Produkt. Im Folgenden werden sowohl die Chancen als auch die Gefahren aufgezeigt, die Modifikationen für Entwicklerfirmen mit sich bringen. Anschließend wird argumentiert, ob die Förderung von Modifikationen und Community-Erstellten-Inhalten für Entwicklerfirmen profitabel ist und somit als Teil der Unternehmensstrategie verfolgt werden sollte. Die Methodik dieser Arbeit verknüpft Beobachtung mit etabliertem Fachwissen und basiert zu einem gewissen Anteil auf Erfahrungsberichten des Autors

    Übersetzerbau. Ein kleiner Überblick

    Get PDF
    Übersetzerbau-Forschung ist heutzutage hauptsächlich durch die Entwicklung von Optimierungs- und Codeerzeugungs-Verfahren geprägt. Dadurch sollen Übersetzer in die Lage versetzt werden, die vielfältigen Eigenschaften moderner Prozessoren effizient zu nutzen. Die Grundlagen moderner Übersetzer, insbesondere die Überprüfung des Eingabeprogramms hinsichtlich syntaktischer und semantischer Regeln sind wohlverstanden und beruhen auf Erkenntnissen aus den 60er und 70er Jahren. Das Erzeugen von lauffähigem Code ist ebenso gut erforscht. Diese Verfahren sind auch über den Übersetzerbau hinaus grundlegend für die Informatik. In den folgenden Kapiteln geben wir eine kleine Einführung in die Arbeitsweise von Übersetzern. Wir verzichten bewusst auf die meisten (formalen) Details und Algorithmen, da wir Einsteigern ermöglichen wollen, die verschiedenen Komponenten dieser komplexen Systeme zu Überblicken und sich eine intuitive Vorstellung von Übersetzern zu bilden. Für das detaillierte Studium der vorgestellten Konzepte, Verfahren und Algorithmen werden wir jeweils Literatur benennen. Die im Anhang besprochenen Standardwerke sind von allgemeinem Interesse. Zwar ist die detaillierte Beschreibung der einzelnen Verfahren unerlässlich für ihr genaues Verständnis, wir sind jedoch der Meinung, dass eine ungefähre Vorstellung von dem, was ein Verfahren bewirkt, das tiefere Verständnis erleichtert. Es besteht dennoch die Gefahr, dass eine fehlgeleitete Intuition dem tieferen Verstehen im Wege steht. Falls dies durch diesen Text geschehen sein sollte, bitten wir um die Nachsicht des Lesers. Wir sind für Kritik und Verbesserungsvorschläge äußerst dankbar, da uns an einer ständigen Verbesserung dieses Textes gelegen ist

    Die Zukunft des MINT-Lernens – Band 1

    Get PDF
    corecore