Hallo Jörg,
jogo hat geschrieben: ↑Mo Mai 27, 2019 9:26 amIst nicht die for-Schleife in R so etwa (nicht ganz so drastisch) wie das
goto in den Programmiersprachen der 3. Generation - noch vorhanden, aber weitestgehend unerwünscht?
Ich bin mir da nicht so sicher. Es soll ja Sprachen geben, Python etwa oder elm, wo ein noch lebender geistiger Vater der Sprache sagt, was gut und was schlecht ist. Das Zen of Python stammt zwar nicht von Guido von Rossum, gibt aber dennoch wertvolle Grundsätze, die in der Python Community weitgehend akzeptiert werden ("There should be one—and preferably only one—obvious way to do it." oder auch "In the face of ambiguity, refuse the temptation to guess.") Das R Core Team hält sich mit Grundsatzfestlegungen ja doch eher zurück und bloß weil Hadley Wickham in diese Lücks springt, muss man ihm ja nicht die Definitionsgewalt geben. Kann man also sagen, dass dieses oder jenes in R unerwünscht ist, oder macht sich das jeder so, wie es ihm passt?
GOTO stammt aus einer Zeit, als man noch nicht genug Ordnungskonstrukte hatte, um die Dinge sauberer zu erledigen. Wenn ich Code per GOTO aufrufe, kann ich diesem Code Daten nur in globalen Variablen mitteilen und die sind aus gutem Grund böse. for-Schleifen gibt es aber in vielen Sprachen die sehr auf Ordnung im Code achten. (Und manche Leute finden GOTO auch noch in Sprachen aus dem aktuellen Jahrhundert gut:
https://stackoverflow.com/questions/110 ... -statement )
Was die "3. Generation" angeht - ich kannte diese Notation nicht, habe Sie gegoolet und hatte den Eindruck, an verschiedenen Stellen verschiedene Definitionen gefunden, die ich für nicht übereinstimmend hielt. Hast Du mal einen Link zu "Deiner" Definition?
Was in meinen Treffern regelmäßig als 5G aufgelistet wurde ist Prolog. Also habe ich mal gegooglet und siehe da: Es gibt schlaue Leute, die eine Schleife für Prolog fordern. Die Argumentation ist zufällig gar nicht soweit weg von meiner oben:
http://citeseerx.ist.psu.edu/viewdoc/su ... 1.1.6.9498
Our initial idea for improving the situation was to provide a comprehensive library of higher-order primitives. A limited versoin of such a library had been available before, providing efficient versions of higher-order predicates like map/3, foldl/4, filter/3 etc. [...] During the redesign, we soon realised that going beyond these basics would require to consider additional concepts like lambda expressions, composition of higher-order predicats [...] This however, would have conflicted with our initial objective: it was unlikely that anything based on such complex concepts would be readily accepted by novices...
Das soll nicht heißen, dass ich den Charme des higher-order nicht nachvollziehen könnte. Ich bin mir nur nicht so sicher, dass Schleifen in R generell abgelehnt würden oder auch abgelehnt werden sollten. Und wenn man sich anschaut, wie elegant eine for-Schleife mit dem foreach-Paket parallelisiert werden kann, ist sie auch nicht unbedingt ein Konzept der Vergangenheit.
Einerseits ist es eine große Chance, dass Neuling noch nicht durch andere Programmiersprachen verdorben sind
Du hast sicher Recht, dass das Bild einer Sprache von den ersten Schritten geprägt wird und wenn man sich mal mit Schleifen zu helfen weiß, dann ist es eine Hürde, sich andere Konzepte anzuschauen, die man "nicht wirklich braucht".
Wenn die for-Schleifen weniger Gewicht bekommen sollen, dann muss man frühzeitig das Erstellen von Funktionen besprechen.
Das ist eben kontextspezifisch. Wenn Du eine Anzahl X Studenten hast, die sich für einen Kurs verpflichtet haben und den in jedem Fall beenden wollen oder wenn ein User Dein Buch gekauft und dafür Geld ausgegeben hat, dann kannst Du mit abstrakten Konzepten anfangen und darauf bauen, dass deren Nutzen sich später schon noch zeigen wird. Wenn Du mehr so eine lockere Option "wenn Du in der Pause mal Zeit hast" als Unterricht anbietest, oder Dein Schüler nicht Dein Buch sondern Deinen Blog liest, dann kann es wichtiger sein, schnell konkrete Ergebnisse zu produzieren. Hast Du denn einen spezifischen Kontext, für den Du die Frage stellst oder ist das mehr so allgemein philosophisch?
Ich habe eine 8jährige Tochter und habe mir lange die Frage gestellt, welche Programmiersprache ich ihr wohl als erstes zeigen werde. (Zu früh? Ich habe gelesen, die Forschung zeige, dass man Mädchen ganz früh für Computer gewinnen müsse, bevor noch die Assoziation entsteht, Computer seien was für Jungen.) Das klingt jetzt vielleicht nach einer ganz anderen Frage, aber so anders ist die gar nicht. Ein
Sprachenkandidat in meinem Kopf war in der Tat Haskell: Minimalistische Syntax, kein Klammernzählen, kein Semicolon am Zeilenende. Stattdessen klare Konstrukte, Funktionen wie aus der Mathematik, gut REPL-fähig. Eine for-Schleife hätte es da gar nicht gegeben, sodass die Frage sich auch nicht gestellt hätte. Eine Sprache mit mathematischer Schönheit, geeignet um Konzepte anstelle von Syntax zu lernen.
Allein -- da hätte ich Jahre warten müssen, bis die Mathematiklehrer die Konstrukte erklären, die in Haskell so schön wiederzufinden sind.
Stattdessen lernt sie jetzt erstmal Scratch: Da ist nix mit Funktionen, dafür Objekte. Die Objekte sind bunte Bilder und alles ist event-driven. Dafür sind die Kommandos in Deutsch verfübar und man hat ratz-fatz lustige Farbeffekte, bewegte Sprites, Soundeffekte und ein Syntax-Error ist, wenn die Puzzleteile nicht zusammen passen. Motivation durch schnelle Erfolge eben. Was aber ein Datentyp ist, ein Rückgabewert, eine Rekursion oder wiederverwendbarer Code, das wird sie damit sicher nicht lernen. Welche Sprache dafür später herhalten muss und ob sie später überhaupt eine "richtige" Sprache lernen will, weiß ich jetzt noch nicht. Die bunten Kätzchen etc. werden ihr bei der "richtigen" Sprache dann aber fehlen.
danke für Deine Antwort
Danke für die Frage. Ich finde es schön, wenn hier im Forum nicht nur nach Code gefragt wird sondern beispielsweise auch, wie man R am besten vermittelt. Gerne auch die Frage, ob wir hier im Forum Schleifen für veraltet halten.
LG,
Bernhard