Imperatives Programmieren in Haskell

Die wohl wichtigste Datenstruktur in Haskell ist die Liste. Da sie als einfach verkette Liste implementiert ist, arbeitet man meist nur am vorderen Ende, und so ist es auch kein Wunder dass es zwar eine Funktion take :: Int -> [a] -> [a] gibt, die die ersten n Elemente einer Liste zurück gibt, aber kein entsprechendes Gegenstück, dass die letzten n Elemente zurück gibt.

In diesem Artikel betrachten wir drei verschiedene Implementierungen einer solchen Funktion: Wir beginnen mit einer naiven funktionalen Implementierung, die sich aber als ineffizient herausstellen wird. Um hier Abhilfe zu schaffen greifen wir auf einen imperativen Algorithmus zurück und sehen dabei, wie man in Haskell imperativ programmieren kann. Zuletzt finden wir dann noch eine effiziente, funktionale Implementierung.

Weiterlesen...

Buchbesprechung: Das Curry-Buch

Vor einigen Tagen schickte mir netterweise Hannes Mehnert ein Exemplar seines neuen Buchs Das Curry-Buch - Funktional programmieren lernen mit JavaScript (zusammen mit Co-Autoren Jens Ohlig und Stefanie Schirmer, gerade erschienen bei O‘Reilly, um die 30€). Hannes bin ich immer mal wieder bei der ICFP über den Weg gelaufen - dort hat er sich beim ICFP Programming Contest als Weltklasse-Programmierer zu erkennen gegeben. Für uns ist das Buch eine gute Gelegenheit, das Repertoire unseres Blogs um die Kategorie „Buchbesprechungen“ zu erweitern.

Weiterlesen...

Medizinische Datenverarbeitung mit funktionaler Programmierung - Ein Beispiel aus der Praxis

Funktionale Programmierung ist längst den Kinderschuhen entwachsen. Inzwischen setzen auch Firmen wie z.B. Twitter oder Microsoft auf funktionale Programmierung, um damit sichere, korrekte und performante Software in kurzer Zeit zu entwickeln.

Heute zeigen wir anhand eines Beispiels aus der Praxis, welche Produkte wir als Firma mit funktionaler Programmierung realisieren. Konkret geht es um das Produkt Checkpad MED, eine digitale und mobile Krankenakte für Krankenhausärzte (Film, Homepage). Checkpad MED wird in Kooperation mit Lohmann & Birkner unter technischer Federführung der factis research GmbH zu einem großen Teil in funktionalen Programmiersprachen entwickelt, im restlichen Teil setzen wir zumindest auf funktionale Paradigmen und Techniken.

In diesem Artikel soll es erstmal weniger um technische Details gehen sondern vielmehr um einen Überblick über das System und seine Architektur. Denn auch auf der Architekurebene kann man Prinzipien der funktionalen Programmierung anwenden und damit Vorteile bzgl. guter Testbarkeit und Nachvollziehbarkeit genießen.

Weiterlesen...

Randomisierte Tests mit QuickCheck

Die Programmiersprache Racket (früher bekannt als MzScheme) kommt mit einer QuickCheck-Bibliothek zum randomisierten Testen, mit der sich die Testabdeckung in Programmen erhöhen lässt: statt dass sich der Programmierer zahlreiche Tests überlegt und ausprogrammiert, generiert die Bibliothek anhand einer Spezifikation zufällige Testfälle, testet sie gegen definierte Eigenschaften und berichtet Gegenbeispiele, falls welche gefunden werden.

Weiterlesen...

Mehr Monaden in Aktion

Dieser Artikel ist der dritte einer Serie von Artikeln über Monaden in Haskell.

  • Im ersten Artikel der Serie haben wir die Grundlagen diskutiert.
  • Im zweiten Teil der Serie haben wir begonnen, eigene Monaden zur Lösung Software-technischer Aufgaben zu entwickeln und haben dabei die Fehler-Monade und die Listen-Monade kennen gelernt.

Im heutigen Teil möchten wir diesen Aspekt vertiefen und erneut demonstrieren, wie durch Monaden ein Stück Software modular und durch lokale Erweiterungen um neue Funktionalität ergänzt werden kann, ohne bestehende Teile zu verändern oder zu refaktorisieren.

Weiterlesen...