Я читал эту статью: http://en.wikipedia.org/wiki/Function_pointer и я растерялся. Поскольку C/C++ поддерживают указатели на функции, не означает ли это, что они поддерживают функциональное программирование в целом? Обратите внимание: я действительно не хочу использовать C или C++ для функционального программирования, но мне любопытно, потому что я никогда не слышал, чтобы C или C++ поддерживали такую вещь. (Я знаю, что компиляторы для многих языков функционального программирования существуют в C, но это не то, что я действительно имею в виду под «поддержкой»).Функциональное программирование на C/C++?
ответ
Редактировать: Я не уверен, почему этот ответ вызывает столько ненависти. В вопросе конкретно задаются указатели на функции, и означает ли их присутствие, что C++ поддерживает «функциональное программирование в целом».
В некотором техническом, не очень полезном способе: да *. Сущностью «функционального» программирования является то, что функции являются значениями. C и C++ не окажут вам никакой помощи с точки зрения таких вещей, как легкое создание и уничтожение lexical closures, а также не окажут вам каких-либо преимуществ с точки зрения partial application. Тот факт, что вы можете имитировать внешний вид функций, которые ведут себя как значения с помощью указателей функций, на самом деле является следствием эквивалентных языков выразительности. Попытка скомпоновать это с «функциональным программированием» действительно глубоко проникает в тэринг Тьюринга.
* Для действительно технического отличия, C и C++ действительно не имеют функциональных символов значений. Указатель функции отличается от значения функции, хотя они выглядят похожими, если вы прищурились.
Функциональное программирование (посмотрите, если вы действительно заинтересованы) имеет мало общего с указателями функций или их отсутствием.
C++ - это язык с несколькими парадигмами с большой поддержкой FP, особенно в более поздних версиях. Многие люди, работающие с WG21, любят FP и настаивают на поддержке. В C++ 11 у нас даже появился лямбда и в дебюте полиморфных лямбдов C++ 14. Это касается многих вещей. В то время как функции остаются гражданами второго сорта, лямбда может взять на себя штраф.
К сожалению, обработка хвостовых рекурсий по-прежнему не является обязательной, но компиляторы фактически ее обрабатывают, и в последнее десятилетие даже удобно сообщать о «бесконечной рекурсии», когда вы просто перепутали перегрузку const. :)
Вы можете пойти довольно далеко, используя стиль FP на C++, и изучение его поможет вам улучшить код, даже если вы выбрали другие стили. Я призываю всех изучить SICP.
Я на самом деле пытаюсь изучить OCaml прямо сейчас, что и привело к моей поисковой Википедии и натолкнувшись на указатели функций. Наверное, я прыгнул с пистолета, задав этот вопрос, не понимая, какое функциональное программирование еще нет. – user2258552
Вы можете выполнять функциональное программирование на C++, хотя язык точно не помогает. Функциональное программирование первого порядка, где вы просто используете неизменяемые ценности как можно больше, конечно, достаточно просто, и хотя это не совсем просто, вы можете реально реализовать monads!
- 1. Функциональное программирование на LISP
- 2. Функциональное программирование на C++
- 3. Функциональное программирование на атомных станциях?
- 4. Чисто функциональное программирование на android
- 5. Применяемое функциональное программирование
- 6. Функциональное программирование, управляемое событиями
- 7. Функциональное программирование + управление доменом
- 8. Функциональное программирование с Clojure
- 9. Функциональное программирование в R
- 10. Чисто функциональное программирование
- 11. Функциональное программирование: функция AggregateUntil
- 12. Функциональное программирование: сумма свойств
- 13. Функциональное реактивное программирование AngularJS?
- 14. Функциональное программирование для Array.map()
- 15. Функциональное программирование в JavaScript
- 16. Функциональное программирование лямбда-выражений
- 17. SML-Функциональное программирование
- 18. C# Функциональное программирование Lambda
- 19. Функциональное программирование: периметр многоугольника.
- 20. Функциональное программирование с Ruby
- 21. Функциональное программирование в JS
- 22. Javascript Функциональное программирование
- 23. Как функциональное программирование влияет на стиль кодирования?
- 24. Функциональное программирование на Python и C++
- 25. Функциональное программирование похоже на самомодифицирующийся код?
- 26. Функциональное программирование в Java на движке google
- 27. Функциональное программирование для базовых алгоритмов
- 28. Функциональное программирование с вложенными обещаниями
- 29. Multithreaded Функциональное программирование в Swift
- 30. Чисто функциональное программирование в D
@cdbitesky, я думаю, что это немного несправедливо. Вопрос относительно точен в попытке выяснить роль указателей функций в разрешении функционального программирования в целом. Очевидно, мы можем немного охарактеризовать технические определения «функционального программирования», но, думаю, я обратился к этому в своем ответе. – Gian