In einer funktionalen Programmiersprache, die leistungsfähig genug ist (beispielsweise mit Datentypen zum Implementieren von Closures ), können Sie alle Verwendungen höherer Ordnung durch die Transformation der Defunktionalisierung eliminieren . Da diese Methode zum Kompilieren dieser Art von Sprache verwendet wird, können Sie davon ausgehen, dass dies keine Auswirkungen auf die Leistung hat und dass in dieser Einstellung eine höhere Reihenfolge die Sprache nicht weniger leistungsfähig macht. Es wirkt sich jedoch darauf aus, wie Code geschrieben wird.
Wenn die Sprache jedoch nicht mächtig genug ist, liefert eine höhere Ordnung die Ausdruckskraft. Betrachten Sie die Lambda-Rechnung: Ohne eine Funktion höherer Ordnung kann sie wirklich nichts ausrichten, hauptsächlich, weil die grundlegendsten Datentypen (Ganzzahlen, Boolesche Werte) mithilfe von Funktionen implementiert werden.
Abschließend kommt es wirklich auf die Sprache an.
Oben ist meine Antwort. Nachfolgend ein Kommentar zu einer üblichen Annahme über imperative Sprachen.
über einen Algorithmus, der auf einer nicht trägen funktionalen Programmiersprache eine -Komplexität aufweist, während derselbe Algorithmus bei der imperativen Programmierung Ω ( n ) ist . Das Hinzufügen von Faulheit zur FP-Sprache würde den Algorithmus zu Ω ( n ) machen .Ω ( n logn )Ω ( n )Ω ( n )
Ich möchte diesen Hinweis sehen. Die übliche Annahme ist, dass ein Zugriff auf ein Array der Länge in einem RAM zur Zeit O ( 1 ) und das Äquivalent in reinem FP zur Zeit O ( log n ) ist . Das ist nicht ganz richtig: Die Zugriffszeit in einem RAM ist in O ( log m ), wobei m die Größe des Speichers ist. Natürlich ist m ≥ n . In der Praxis ist der Zugriff auf ein Element eines Arrays viel schneller. Ein Grund wäre, dass m begrenzt ist, aber ... n auch !nO ( 1 )O ( logn )O ( logm )mm ≥ nmn
EDIT: Danke für den Link (der Link für das Paper über Faulheit ist nicht verfügbar, hier ist noch einer ). Wie in den Kommentaren und oben in meiner Antwort angegeben, ist das RAM-Modell etwas unfair gegenüber reinem FP, da es -Zeit-Lookups bietet, auch wenn die Größe einer Adresse nicht beschränkt ist. Ich muss noch verstehen, wie der faule Trick funktioniert, aber ich denke, es ist wichtig zu beachten, dass dies nur für dieses spezielle Problem gilt.O ( 1 )