Eines der Hauptprobleme beim Programmieren traditioneller Sprachen wie C, Java, C #, Assembler usw. besteht darin, dass Sie eine umständliche Abfolge von Schritten ausführen müssen, um eine bestimmte Aufgabe auszuführen, da Sie zuerst alle Abhängigkeiten vorbereitet haben müssen und Ihre Abhängigkeiten früher
Ein Beispiel: Um A ausführen zu können, müssen B und C vorhanden sein, und B hängt von D und E ab, was zu so etwas wie führt
weil Sie die Zutaten vorbereiten müssen, bevor Sie sie verwenden können.
Funktionale Sprachen, besonders die faulen, stellen diese auf den Kopf. Indem Sie A sagen lassen, dass es B und C benötigt, und die Laufzeit der Sprache herausfinden lassen, wann B und C zu erhalten sind (was wiederum D und E erfordert), die alle ausgewertet werden, wenn A ausgewertet werden muss, können Sie sehr klein und präzise erstellen Bausteine, die zu kleinen und übersichtlichen Programmen führen. Die faulen Sprachen ermöglichen auch die Verwendung von unendlichen Listen, da nur die tatsächlich verwendeten Elemente berechnet werden und nicht die gesamte Datenstruktur gespeichert werden muss, bevor sie verwendet werden kann.
Der wirklich schöne Trick ist, dass dieser automatische "Oh, ich brauche ein B und ein C" Mechanismus skalierbar ist, da es - wie im sequentiellen Programm - keine Einschränkung gibt, wo und wann diese Auswertung stattfinden kann, so dass es am geschehen kann zur gleichen Zeit und sogar auf verschiedenen Prozessoren oder Computern.
Deshalb sind funktionale Sprachen interessant - denn der Mechanismus "Was ist zu tun, wenn" wird vom Laufzeitsystem übernommen, und der Programmierer muss ihn nicht manuell ausführen. Dies ist ein ebenso wichtiger Unterschied wie die automatische Garbage Collection für Java in C und einer der Hauptgründe, warum es einfacher ist, robuste, skalierbare Multithread-Software in Java als in C zu schreiben. skalierbare Multithread-Software in funktionalen Sprachen ...