« OK, Erlang und die Liste :-D | Main| OK, Erlang fun vs. functions »

OK, Erlang und was man mit einer Liste machen kann .....

0
Kategorie  
Listen, waren die Dinger, welche zwischen [] (eckigen Klammern) durch Komma (,) getrennte Einträge hatten ....

Wie kann man nun zum Beispiel die Summe von einer Liste berechnen?
Nicht vergessen wir bewegen uns in der Funktionalen Welt, d.h. Rekursion ist angesagt.........

Nehmen wir einmal an, wir hätten eine Funktion sum(Liste,Startwert), welche als Ergebnis zurückliefern soll die Summe der Listenelemente + den Startwert .... dann wäre sum(Liste,0) unser gewünschtes Ergebnis, nehme ich mal so an

Die Funktion sum(Liste,Startwert), sollte natürlich Startwert zurückgeben, wenn die Liste leer ist,

dies schreibt man in Erlang so ->
sum([],N) -> N

ist die Liste dagegen nicht leer, und ich bezeichne mit H, dass erste Listenelement und mit T den Rest der Liste, d.h. L\H, schreibt man dies in Erlang wie folgt:
sum(H|T,N) -> sum(T,H+N)

Da Erlang sehr viel Wert auf Pattern-Matching legt und diese einfach durch ; getrennt werden (die einzelnen Patterns).

Sieht das gesamt Ergebnis wie folgt aus ->

sum(L) -> sum(L,0).

sum([],N) -> N;
sum(H|T,N) -> sum(T,H+N).

Wenn man das ganze in ein Modul mit dem Namen mymath packt, bekommt man ->
-module(mymath).
-export([sum/1,square/1]).

sum(L) -> sum(L,0).

sum([],N) -> N;
sum(H|T,N) -> sum(T,H+N).

square(X) -> X * X.

Habe noch eine Funktion square hinzugefügt, damit ich auch die Summe der Quadrate bilden kann
 Na ja, also dann mal kompilieren und ab in die Shell ->

L = { 1,2,3,4,5 }. % Liste definieren punkt nicht vergessen
mymath:sum(L). % Funktionen müssen mit dem Modulnamen vorher aufgerufen werden, soweit ich es momentan verstanden habe
Ergebnis = 15 .... funzt ....

OK, also Listenmodul suchen -> heißt lists ... und dort ist die Funktion map(F,L) definiert, welche die Funktion F auf jedes Element von L anwendet und eine neue Liste zurückgibt....
Nach der Theorie sollte also mymath:sum(lists:map(mymath:square,L)) zum Ziele führen.....

Ergebnis -> * 2: illegal expression

Was die Fehlermeldung bedeutet habe ich noch nicht herausgefunden, aber das es halt nicht geht

Den Workaround, den ich auf die Schnelle gefunden habe, man benutzt eine anonymous Function in Erlang werden die mit Spaß also fun definiert

F = fun(X) -> mymath:square(X) end.

Wenn dann man eingibt in der Shell ->
mymath:sum(lists:map(F,L)).

Ergebnis -> 55 ....

Gruß JJR




Mach einen Kommentar

:-D:-o:-p:-x:-(:-):-\:angry::cool::cry::emb::grin::huh::laugh::lips::rolleyes:;-)

Amazon


Impressum

Firmenname: Peanuts-Soft
Straße Nummer: Biinger Strasse 8
PLZ Ort: 55263 Wackernheim
Telefon: +491772134526
E-Mail: joerg.reck @ peanuts-soft.de
Disclaimer: Peanuts-Soft übernimmt keine Garantie dafür, dass die auf dieser Website bereitgestellten Informationen vollständig, richtig und stets aktuell sind. Dies gilt auch für alle Links, auf die verwiesen wird. Peanuts-Soft ist für die Inhalte, auf die per Link verwiesen wird, nicht verantwortlich. Peanuts-Soft haftet nicht für konkrete, mittelbare und unmittelbare Schäden oder Schäden, die durch fehlende Nutzungsmöglichkeiten, Datenverluste oder entgangene Gewinne – sei es aufgrund der Nichteinhaltung vertraglicher Verpflichtungen, durch Fahrlässigkeit oder eine andere unerlaubte Handlung – im Zusammenhang mit der Nutzung von Dokumenten oder Informationen bzw. der Erbringung von Dienstleistungen entstehen, die auf dieser Web Site zugänglich sind.
Datenschutz: Inhalt und Gestaltung der Internetseiten sind urheberrechtlich geschützt. Eine Vervielfältigung der Seiten oder deren Inhalte bedarf der vorherigen schriftlichen Zustimmung von Peanuts-Soft.


Locations of visitors to this page

Powered By

Domino BlogSphere
Version 3.0.2