List Comprehension vs. Map/Lambda

Ich lese gerade das Buch „Get Programming with Haskell“ und erstelle kleine Übungsprogramme, um Haskell auszuprobieren.

Die Aufgabe, die ich hier beschreibe, ist es eine einfache Konsolenanwendung zu schreiben, die eine Multiplikationstabelle berechnet und ausgibt.

So etwas in z.B. Java zu implementieren ist sehr einfach, da man einfach zwei Schleifen ineinander schachteln kann. Da Haskell eine rein funktionale Sprache ist, gibt es leider keine einfachen Schleifen, geschweige denn veränderbare (Schleifen-)Variablen.

Ich stelle hier zwei verschiedene Lösungen vor: Eine mit Map/Lambda und eine mit List Comprehensions.

Zuerst die mit Map/Lambda:

Und hier die Version mit List Comprehensions:

Wie man sieht, unterscheiden sich die beiden Programme an den Stellen, an denen Listen erstellt werden. Der Codeabschnitt:

erstellt eine Liste bestehend aus 4 Zeichen breiten Strings, die die Ergebnisse der Multiplikation von r (Row) mit c (Column) als rechtsbündige Strings darstellen. Also [“ 1″, “ 2″,…,“ 10″]. Mit mconcat werden die Strings in dieser Liste dann zu einem einzigen String verkettet.

In der Version mit List Comprehension sieht der Codeabschnitt so aus:

Mir persönlich gefällt die Version mit List Comprehension besser, da sie einfacher zu lesen ist und viel schöner und klarer aussieht.

CSV-Datei mit Tankstatistik in Rust auswerten

Seit wenigen Tagen beschäftige ich mich mit Rust und habe als Übung ein Programm erstellt, mit dem ich meine Tankstatistik auswerten kann. Die Daten habe ich mit meiner Android-App Tankstatistik gesammelt und exportiert.

Die Daten müssen in einer Datei „tanken.txt“ im Hauptverzeichnis des Rust-Programmes gespeichert werden und sehen wie folgt aus:

In der ersten Spalte steht das Tankdatum, in der zweiten der Kilometerstand, in der dritten die getankten Liter und in der vierten der Preis. Die beiden letzten Zahlen benutzen als Dezimalpunkt das Komma, damit man die Daten leichter in das deutschsprachige Excel importieren kann. Die Spalten sind mit dem Tabulatorzeichen (\t) getrennt. Die Daten können hier heruntergeladen werden.

Das Rust-Programm besteht aus zwei Dateien „main.rs“ und „lib.rs“. Dabei benutzt das Hauptprogramm „main.rs“ die Funktionen aus der Bibliothek „lib.rs“.

Das Programm kann bei GitHub ausgecheckt werden.

Das Projekt verwendet einige Features von Rust wie Structs mit Datenfeldern und Implementierungen von Funktionen und Methoden, Collections wie Vec und HashMap, Closures, Iteratoren, Dateizugriffe, Sortieren und Tests.

Die Datei „lib.rs“ sieht wie folgt aus:

Die Datei „main.rs“ sieht so aus:

Wenn Du das mal ausprobieren willst, dann erstelle in einem freien Verzeichnis das Projekt „tanken“ mit:

>cargo new tanken
>cd tanken

Kopiere dann die beiden Dateien „main.rs“ und „lib.rs“ in das „src“-Unterverzeichnis und die Datei „tanken.txt“ in das Hauptverzeichnis „tanken“. Jetzt kannst Du die Tests laufen lassen mit:

>cargo test

Und das Programm kannst Du laufen lassen mit:

>cargo run

Dann solltest Du folgendes sehen:

Viel Spaß!