List Comprehensions – Erlangs elegante for-Schleife

In Erlang gibt es das besondere Konstrukt der List Comprehension um elegant und ohne viel Code eine List von Zahlen schnell erzeugen zu können.

Sie werden meist in den folgenden Fällen eingesetzt:

  1. Anwendung einer Funktion auf eine Liste
  2. Filterung einer Liste
  3. verschachtelte for-Schleifen

Der Syntax der List Comprehensions

[Expression || Generaotor1, Guard11,...GuardN1, Generator2, Guard12,......GeneraotorM, Guard1M,...GuardNM,]

Expression: spezifiziert die Ergebniselement der Ergebnisliste

Generator: vergleichbar mit einer for-Schleife, bei der jedes Element der Liste durchlaufen wird: Syntax: Element<-Liste

Guards: haben eine Filter-Funktion, die bestimmt, ob ein Element in der Ergebnis-Liste landet

Einfache Beispiele für Lists Comprehensions

[X||X<-[1,2,3,4]].        
[1,2,3,4]
[X||X<-[1,2,3,4], X < 3].
[1,2]
[X||X<-[1,2,3,4], X rem 2 == 0].
[2,4]

weiterlesen…

Threads in Erlang

Mit Erlang lässt sich besonders einfach verteilter Code schreiben, der auf verschiedenen Threads Laufen kann ohne Probleme.

Erlang ist somit die Sprache der Wahl um verteilte Anwendungen zu schreiben.

Regeln bei Threads in Erlang

  • Threads greifen dabei nicht auf gemeinsamen Speicherraum zu, sondern kommunizieren nur über Messages miteinander, um Kollisionen auszuschließen.
  • Senden ist asynchron, für synchrone Nachrichten muss self() mitgesendet und ausgewertet werden (self gibt die eigene Pid aus)
  • zum Kommunizieren zwischen den Prozessen kann entweder die Pid mitgesendet werden (elegant), oder erfragt werden mit whereis() weiterlesen…

Erlang Übungsbeispiele

Aufgabe: 2520 ist die kleinste Zahl, die durch jede Zahl von 1-10 ohne Rest geteilt werden kann. Was ist die kleinste positive Zahl, die durch alle Zahlen von 1-20 ohne Rest teilbar ist? Es soll die Brute Force Variante programmiert werden.

Lösung:

-module(kleinsterAllesTeiler).
-compile(export_all).

kleinsterAllesTeiler(X) -> kleinsterAllesTeiler(X, 2, X).
kleinsterAllesTeiler(X, Teiler, KleinsteSuperZahl) when (Teiler > X) -> KleinsteSuperZahl;
kleinsterAllesTeiler(X, Teiler, KleinsteSuperZahl)->
    %io:fwrite("X: ~w \t Teiler: ~w \t KleinsteSuperZahl: ~w\n", [X, Teiler, KleinsteSuperZahl]),
    case teilbar(KleinsteSuperZahl, Teiler) of
        true ->kleinsterAllesTeiler(X, Teiler + 1, KleinsteSuperZahl);
        false ->kleinsterAllesTeiler(X, 2, KleinsteSuperZahl + 1)
end.

teilbar(X, Teiler) when (X rem Teiler) == 0 -> true;
teilbar(X, Teiler) -> false.

weiterlesen…

Erlang Tutorial Windows

Für die professionelle Entwicklung mit Erlang stehen verschiedene Editoren und IDEs zur Verfügung: Übersicht siehe Punkt 7.7. Leider konnte mich das Eclipse Plugin nicht überzeugen und das Netbeans Plugin lies sich nicht installieren und Netbeans 7, weswegen ich Notepad++ benutze zum Entwickeln (siehe unten).

Die Vorteile der funktionalen Programmiersprache Erlang

  1. mathematische Korrektheitsbeweise sind einfach möglich
  2. sehr kurzer Quelltext
  3. für verteilte Anwendungen sehr geeignet
  4. der Datentyp INT ist nicht beschränkt, keine numerischen Effekte (Runden)
  5. keine Seiteneffekte

Bsp. Anwendungen in Erlang geschrieben:

  1. CouchDB
  2. SimpleDB
  3. Yaws – Webserver weiterlesen…