Hallo Tim,
ich antworte mal in eine etwas andere Richtung in der Hoffnung, dass ein anderer Blick das klarer macht.
Ja, du hast mir mit diesem anderen Blick sehr geholfen.
Ich habe eine geordnete Menge, hier eine Knotenliste, die current node list. Diese Menge (Knotenliste) wird in der gegebenen Reihenfolge durchlaufen, wobei bei jedem Durchlauf ein durch die Reihenfolge gegebenes Element (Knoten) zum gegenwärtigen Element (current node) wird, auf das ich unmittelbaren Zugriff habe.
Da stimmt Dir jeder zu – bis auf „in der gegebenen Reihenfolge durchlaufen“. Das ist nämlich nicht nötig.
Du hast recht, ich habe mich da unglücklich ausgedrückt, das mit xsl:sort ist schon klar.
Das ist der Knackpunkt. Das Starten der Ausführung der jeweiligen Verarbeitung eines Knotens geschieht hier immer noch in einer Schleife („Da loopt was“™). Aber das konkrete Ausführen und das Sammeln der Resultate nicht mehr. Das ist schon keine klassische Schleife mit einem vorhersehbaren Nacheinander mehr.
Ja, sehr schön erklärt, du bist auf dem besten Wege mich zu überzeugen :-)
Es ist _keine_ Schleife, weil das wesentliche Element einer Schleife fehlt: Das Nacheinanderfolgen der Ausführung der Funktion. Es ist schlichtweg wurst, in welcher Reihenfolge das geschieht – schließlich kann die Funktion die Welt ausserhalb sich selbst nicht verändern.
Ich muss darüber nachdenken, aber vermutlich hast du mich schon überzeugt :-)
Die Frage für mich wird vermutlich sein, ob ich ggf. wider besseren Wissens trotzdem noch von Schleife reden soll, denn auf "Anschaungsebene" tritt mir for-each als Schleife entgegen.
Wenn es "praktisch" gesehen keinen Unterschied machen würde, ob ich von Schleife rede oder nicht, dann dürfte die Sichtweise "for-each als Schleife" keinerlei Auswirkung in Bezug auf die Herangehensweise an die konkrete Aufgabenstellung haben.
Ich werde also versuchen ein Beispiel zu finden, wo diese Sichtweise tatsächlich Auswirkung hat und falls ich fündig werde, rede ich nie, nie mehr von Schleife :-)
Aber dieser Aspekt der Aufteilung von Problemen in lauter kleinere unabhängige Probleme als passender Programmierstil für XML-Bäume war hier nicht so gut zu erklären wie das Beispiel der Parallelisierung, deswegen musstest Du unter diesem Sermon leiden.
Das Beispiel mit der Parallelisierung war sehr anschaulich und hast mir damit die Idee der funktionalen Programmierung ein gutes Stück näher gebracht.
Gruß Uwe