Eine kleine Einführung in die rein funktionale Programmierung - Teil 3

In einem vorigen Beitrag haben wir aus einzelnen Schnecken eine Schneckenwelt zusammengesetzt und grafisch dargestellt. Bisher haben sich die Schnecken einfach nur stur in gerader Linie bewegt; in diesem Posting wollen wir es etwas interessanter machen und jede Schnecke mit einer Schleimspur ausstatten, und schließlich dafür sorgen, daß andere Schnecken dieser Schleimspur ausweichen. („Der Schleim der anderen Schnecken stinkt!“) Am Ende soll das dann so aussehen:

</img>


Diese Erweiterungen verdeutlichen weitere Vorteile der rein funktionalen Programmierung:

  • Die explizite Angabe von Abhängigkeiten macht Zusammenhänge zwischen Werten im Programm deutlich und dessen Bedeutung unabhängig von der Auswertungsreihenfolge.

  • Der explizite Umgang mit Zeit ermöglicht eine akkurate Simulation der Schneckenwelt.

  • Der explizite Umgang mit Identität macht Programme weniger fehleranfällig und einfacher zu debuggen gegenüber imperativen Programmen.

Weiterlesen...

Monaden: Das programmierbare Semikolon

Unter den Software-Entwicklern gibt es einige, die über die Haskell-Anhänger witzeln: Wenn du mit einem Haskell-Fan sprichst, achte mal darauf, wie viele Minuten es dauert, bis das Wort Monade fällt. Manche Entwickler schließen daraus voreilig, dass man mit Haskell nur arbeiten kann, wenn man weiß, was eine Monade ist.

Viele Haskell-Entwickler nutzen Monaden, ohne viel darüber nachzudenken. Die intuitive do-Notation, die das Arbeiten mit Monaden sehr einfach macht, wird sowohl für die Ein- und Ausgabe als auch z.B. in der häufig verwendeten Parser-Bibliothek parsec und in vielen anderen Bibliotheken genutzt. Monaden nutzen ist eine sehr einfache und bequeme Sache.

Man kann in Haskell also sehr wohl Programme entwickeln, ohne Monaden bis in alle Einzelheiten zu verstehen, aber insbesondere für Real-World-Haskell-Projekte bilden Monaden ein wichtiges Software-technisches Konzept, mit dem wiederverwendbare und modular erweiterbare Software konstruiert werden kann.

Einer der prominentesten Entwicker der Sprache Haskell, Philip Wadler, hat in einer Vortragsdiskussion auf die Frage Wie würden Sie einem Nicht-Haskeller erklären, was eine Monade ist? geantwortet: Ein programmierbares Semikolon.

Diese Antwort bedarf ein wenig Erklärung.

Weiterlesen...

Eine kleine Einführung in die rein funktionale Programmierung - Teil 2

In einem vorigen Beitrag haben wir das Vorhaben begonnen, eine Schneckenwelt zu implementieren. Zur Erinnerung:

[…] nehmen wir uns ein konkretes Beispiel vor: Es geht um die Simulation und Visualisierung einer Welt (vielleicht für ein Videospiel), in der sich Schnecken bewegen […]. Die Schneckenwelt ist zweidimensional, und wir fangen mit sehr sturen Schnecken an, die sich stets in die gleiche Richtung bewegen und sich nicht davon abhalten lassen.

In diesem Posting kümmern wir uns erst einmal um die individuellen Schnecken, die wir in einem späteren Posting dann in der Schneckenwelt anordnen. In einem dritten Posting werden wir das Programm so erweitern, daß die Schnecken Schleimspuren hinterlassen und den Schleimspuren anderer Schnecken („die stinken“) ausweichen. Das ganze visualisieren wir dann dergestallt, daß es so aussieht:

</img>


Wir erweitern den Code vom letzten Mal und ordnen Schnecken in einer Schneckenwelt an:

Weiterlesen...