Парадигма функционального программирования моделирует вычисления как отношения между наборами и, таким образом, по сути своей декларативна. Однако на практике мы часто думаем о функциях как об императивных, то есть вы вводите входное значение и получаете выходное значение, как и в процедуре. С этой точки зрения характерным свойством функции является то, что она не имеет побочных эффектов. Из-за неоднозначности терминов мы называем такую функцию pure , и язык, который имеет только чистые функции, будет чисто функциональным языком.
Однако не все функциональные языки являются чистыми: функциональный язык - это язык с синтаксисом и семантикой, который позволяет программисту эффективно использовать функциональную парадигму. Некоторые из концепций, которые делают возможным использование этой парадигмы, включают, среди прочего, лямбда-выражения с лексическим замыканием, функции высшего порядка, типы вариантов и сопоставление с образцом, ленивая оценка, вывод типов (в случае языков со статической типизацией).
Это ни в коем случае не авторский список, и язык вполне может быть функциональным, не предоставляя всех или даже большинства из них, но если язык делает - то есть делает их пригодными для использования без необходимости переходить через основные циклы - их присутствие сильный показатель того, что язык следует считать функциональным.
Я не знаю достаточно о Boost, чтобы решить, является ли C ++ 03 + Boost жизнеспособным функциональным языком, но C ++ 0x определенно делает C ++ более функциональным, возможно, даже отталкивая его субъективная граница царства функциональных языков.
Кроме того, те же соображения применимы и к другим парадигмам программирования: C ++ также не является чисто объектно-ориентированным языком (действительно, очень сложно - возможно, даже теоретически невозможно) разработать язык, который является как чисто функциональным, так и чисто объектным. -ориентированы), и большинство функций, которые обычно ассоциируются с ОО-языками (классы, наследование, инкапсуляция), на самом деле также никоим образом не являются авторскими ...