Ho letto questo articolo: http://en.wikipedia.org/wiki/Function_pointer e sono un po 'confuso. Poiché i puntatori alle funzioni di supporto C/C++, non significa che supportano la programmazione funzionale in generale? Nota che in realtà non voglio usare C o C++ per la programmazione funzionale, ma sono curioso dal momento che non ho mai sentito che C o C++ supporti una cosa del genere. (So che i compilatori per molti linguaggi di programmazione funzionale esistono in C, ma non è quello che intendo per "supporto").Programmazione funzionale in C/C++?
risposta
Modifica: Non sono sicuro del motivo per cui questa risposta diventa così tanto odio. La domanda si riferisce in particolare ai puntatori di funzione e se la loro presenza significa che C++ supporta "programmazione funzionale in generale".
In una sorta di tecnica, non molto utile: sì *. La vera essenza della programmazione "funzionale" è che le funzioni sono valori. C e C++ non ti daranno alcun aiuto in termini di cose come la facile creazione e distruzione di lexical closures, né ti farà alcun favore in termini di partial application. Il fatto che sia possibile simulare l'aspetto di funzioni che si comportano come valori usando i puntatori di funzione è in realtà solo una conseguenza dei linguaggi equivalenti di espressività. Cercando di confondere questo con la "programmazione funzionale", si sta veramente facendo strada nel sottosuolo di Turing.
* Per una distinzione davvero tecnica, C e C++ non hanno alcun valore . Un puntatore a funzione è distinto dal valore di una funzione, anche se sembrano simili se si strizza l'occhio.
La programmazione funzionale (si prega di cercarlo se si è veramente interessati) ha poco a che fare con i puntatori di funzioni o la mancanza di essi.
C++ è un linguaggio multi-paradigma con una grande quantità di supporto per FP, in particolare le versioni successive. Molte persone che lavorano con WG21 come FP e spingono per il supporto. In C++ 11 abbiamo anche ottenuto il lambda e il debutto polimorfo di lambda in C++ 14. Questo copre molte cose. Mentre le funzioni restano di seconda classe, i cittadini lambda possono prendere il controllo.
Purtroppo la gestione della ricorsione in coda non è ancora obbligatoria, ma i compilatori effettivamente la gestiscono, e nell'ultimo decennio riportano anche "ricorsione infinita" quando si è incasinato il sovraccarico const. :)
Si può andare molto lontano usando lo stile FP in C++ e l'apprendimento aiuta a creare codice migliore anche quando si scelgono altri stili. Invito tutti a studiare SICP.
Attualmente sto cercando di imparare OCaml in questo momento, che è ciò che ha portato alla mia esplorazione di Wikipedia e alla scoperta dei puntatori di funzione. Credo di aver saltato la pistola ponendo questa domanda senza capire veramente cosa sia ancora la programmazione funzionale. – user2258552
È possibile eseguire la programmazione funzionale in C++, sebbene la lingua non sia di aiuto. La programmazione funzionale del primo ordine, in cui si utilizzano semplicemente valori immutabili il più possibile, è certamente abbastanza semplice e, sebbene non esattamente facile, è possibile implementare lo standard monads!
- 1. programmazione funzionale in R
- 2. test in programmazione funzionale
- 3. Programmazione reattiva funzionale in Scala
- 4. Programmazione guidata evento funzionale
- 5. Programmazione pura funzionale alla GPU
- 6. Elaborazione batch e programmazione funzionale
- 7. multithread programmazione funzionale a Swift
- 8. Linguaggi di programmazione funzionale introspezione
- 9. Modelli aziendali con programmazione funzionale
- 10. ciclo infinito nella programmazione funzionale?
- 11. Macchina per la programmazione funzionale
- 12. Programmazione funzionale negli impianti nucleari?
- 13. Haskell - Guida alla programmazione funzionale
- 14. Confusione funzione di programmazione funzionale
- 15. snippet di programmazione funzionale Python
- 16. Qual è zip (programmazione funzionale?)
- 17. Ordinamento in linguaggi di programmazione funzionale
- 18. CMS in linguaggio di programmazione funzionale
- 19. Programmazione funzionale in stile C++ 11, F #
- 20. Programmazione funzionale del database in Clojure
- 21. funzionale programmazione Principiante: currying in Java
- 22. firme/tipi in programmazione funzionale (OCaml)
- 23. Quale linguaggio di programmazione funzionale dovrei scegliere come primo linguaggio di programmazione funzionale?
- 24. Com'è possibile implementare call/cc, ma la logica classica (intuizionistica + chiamata/cc) non è costruttiva?
- 25. La programmazione funzionale deve essere insegnata prima della programmazione imperativa?
- 26. Come implementeresti un linguaggio di programmazione funzionale?
- 27. programmazione funzionale: immutabile efficienza struttura dati
- 28. Gli "algoritmi" esistono nella programmazione funzionale?
- 29. I linguaggi di programmazione funzionale sono adatti alla programmazione grafica?
- 30. Programmazione funzionale/Clojure di apprendimento - esercizi pratici?
@cdbitesky, penso che sia un po 'ingiusto. La domanda è relativamente precisa nel tentativo di accertare il ruolo dei puntatori di funzione nel consentire la programmazione funzionale in generale. Ovviamente possiamo cavillare un po 'sulle definizioni tecniche di "programmazione funzionale", ma penso di averlo affrontato nella mia risposta. – Gian