2013-06-03 28 views
9

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++?

+0

@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

Antwort

7

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.

+1

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

+2

Sie können wählen, meine Antwort für C++ 14 als falsch zu interpretieren. Die Frage bezog sich wirklich auf Funktionszeiger. – Gian

14

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.

+0

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

4

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!

Verwandte Themen