Ich habe diesen Artikel gelesen: http://en.wikipedia.org/wiki/Function_pointer und bin irgendwie verwirrt. Da C/C++ Funktionszeiger unterstützt, heißt das nicht, dass sie die funktionale Programmierung im Allgemeinen unterstützen? Beachten Sie, dass ich eigentlich nicht C oder C++ für die funktionale Programmierung verwenden möchte, aber ich bin neugierig, da ich nie gehört habe, dass C oder C++ so etwas unterstützt. (Ich weiß, dass Compiler für viele funktionale Programmiersprachen in C existieren, aber das ist nicht, was ich wirklich mit "Unterstützung" meine).Funktionale Programmierung in C/C++?
Antwort
Edit: Ich bin mir nicht sicher, warum diese Antwort Hass so viel bekommt. Die Frage fragt speziell nach Funktionszeigern, und ob ihre Anwesenheit bedeutet, dass C++ "funktionale Programmierung im Allgemeinen" unterstützt.
In einer Art von technischen, nicht sehr nützlich: ja *. Das eigentliche Wesen der "funktionalen" Programmierung ist, dass Funktionen Werte sind. C und C++ geben Ihnen keine Hilfe in Bezug auf Dinge wie die einfache Erstellung und Vernichtung von lexical closures, noch werden Sie in Bezug auf partial application Gefallen tun. Die Tatsache, dass Sie das Auftreten von Funktionen simulieren können, die sich mit Funktionszeigern wie Werte verhalten, ist in Wirklichkeit nur eine Konsequenz der entsprechenden Expressivitätssprachen. Der Versuch, dies mit "funktionaler Programmierung" zu verbinden, taucht wirklich tief in das Turing-Tarpit ein.
* Für eine wirklich technische Unterscheidung, C und C++ wirklich haben keine Funktion typisierte Werte. Ein Funktionszeiger unterscheidet sich von einem Funktionswert, obwohl er beim Schielen ein wenig ähnlich aussieht.
Was ist mit Funktoren? Sie sind die Standardmethode zur Verwendung der STL. In C++ 11 haben Sie monomorphe Lambdas, und in C++ 14 haben Sie generische Lambdas. – gnzlbg
Sie können wählen, meine Antwort für C++ 14 als falsch zu interpretieren. Die Frage bezog sich wirklich auf Funktionszeiger. – Gian
Funktionale Programmierung (bitte nachschlagen, wenn Sie wirklich interessiert sind) hat wenig mit Funktionszeigern oder deren Fehlen zu tun.
C++ ist eine Multi-Paradigma-Sprache mit einer großen Unterstützung für FP, besonders die späteren Versionen. Viele Leute arbeiten mit WG21 wie FP und drängen auf Unterstützung. In C++ 11 haben wir sogar Lambda und in C++ 14 polymorphes Lambda-Debüt bekommen. Das deckt viele Dinge ab. Während Funktionen bleiben Bürger zweiter Klasse Lambda kann gut übernehmen.
Leider Tail-Recursion-Handling ist immer noch nicht obligatorisch, aber Compiler tatsächlich damit umgehen, und in den letzten zehn Jahren sogar bequem "unendliche Rekursion" melden, wenn Sie gerade die Const-Überlastung durcheinander gebracht. :)
Sie können ziemlich weit mit FP-Stil in C++ gehen, und lernen es hilft Ihnen, besseren Code zu machen, auch wenn Sie andere Stile wählen. Ich ermutige alle zu studieren SICP.
Ich versuche gerade jetzt, OCaml zu lernen, was dazu führte, dass ich Wikipedia erkundete und Funktionszeiger entdeckte. Ich denke, ich habe die Waffe übersprungen, indem ich diese Frage gestellt habe, ohne wirklich zu verstehen, was funktionale Programmierung ist. – user2258552
Sie können funktionale Programmierung in C++ durchführen, obwohl die Sprache nicht gerade hilft. Funktionale Programmierung erster Ordnung, bei der Sie einfach unveränderliche Werte so viel wie möglich verwenden, ist sicherlich einfach genug und, obwohl nicht gerade einfach, können Sie tatsächlich monads implementieren!
- 1. Funktionale Programmierung in Kernkraftwerken?
- 2. funktionale Programmierung in R
- 3. Funktionale Ereignis-gesteuerte Programmierung
- 4. Haskell - Funktionale Programmierung Hilfe
- 5. Funktionale Programmierung Funktion Verwirrung
- 6. Unterstützt Dart funktionale Programmierung?
- 7. Python funktionale Programmierung Schnipsel
- 8. Batch-Verarbeitung und funktionale Programmierung
- 9. Funktionale Programmierung: Summe der Eigenschaften
- 10. Funktionale Programmierung: Beste Plattform/Umgebung
- 11. Über die funktionale Stil Programmierung
- 12. Funktionale Programmierung mit verschachtelten Versprechen
- 13. C++ funktionale Programmierung Code-Schnipsel
- 14. die Räder neu erfinden: Node.JS/Ereignisgesteuerte Programmierung vs. Funktionale Programmierung?
- 15. Pure funktionale Programmierung für die GPU
- 16. Muster für funktionale, dynamische und aspektorientierte Programmierung
- 17. JS funktionale Programmierung für n Elemente bevölkern
- 18. Funktionale Programmierung - Aufruf Funktion mit allen Parametern
- 19. unwichtige Frage über Erlang und funktionale Programmierung
- 20. Ist die funktionale Programmierung in Rust Zero-Cost?
- 21. Funktionale Programmierung in C mit Makro „Funktion höherer Ordnung“ Generatoren
- 22. Erlang (Funktionale Programmierung) vs Objektorientierte Programmierung in Bezug auf das Denken
- 23. Python, funktionale Programmierung, Mapping auf eine höhere Ebene
- 24. Welche Best Practices gelten für die funktionale Programmierung und Datenbankinteraktion?
- 25. Funktionale Programmierung mit Python zum Extrahieren aufeinanderfolgender großgeschriebener Wörter
- 26. Funktionale Programmierung - einfache For-Schleife zum Inkrementieren des Zählers
- 27. Python und funktionale Programmierung: Gibt es eine apply() Funktion?
- 28. Kann die funktionale reaktive Programmierung (FRP) mit Monaden ausgedrückt werden?
- 29. Funktionale Programmierung und Abhängigkeitsinversion: Wie kann man den Speicher abstrahieren?
- 30. Wird die funktionale Programmierung als "mathematischer" betrachtet? Wenn ja warum?
@cdditesky, ich denke, das ist ein bisschen unfair. Die Frage ist relativ präzise bei dem Versuch, die Rolle von Funktionszeigern beim Zulassen von funktionaler Programmierung im Allgemeinen zu ermitteln. Natürlich können wir ein wenig über technische Definitionen von "funktionaler Programmierung" spotten, aber ich denke, dass ich das in meiner Antwort angesprochen habe. – Gian