Не претендуя на абсолютную истину, я для себя в какое-то время решил определять функциональность языка наличием в нем первоклассных лямбд с автоматическим замыканием лексического контекста изкоробки (не эмуляцией коллабл объектами и прочим). В этом плане Джава фя, С++ и Питон фя с ограничениями, а С и Паскаль не фя. И поддерживаю тезис "императивное с функциональным вообще не связано". Большинство фя при этом императивны, и лишь некоторые декларативны.
Тот факт, что в С++, объявляя функцию высшего порядка, нужно заранее планировать, можно ли будет ей в качестве параметра передавать только "обычные" функции или "настоящее" замыкание — уже многое говорит о С++ как о ФЯ. (см. std::function)
Тот факт, что в С++, объявляя функцию высшего порядка, нужно заранее планировать, можно ли будет ей в качестве параметра передавать только "обычные" функции или "настоящее" замыкание — уже многое говорит о С++ как о ФЯ. (см. std::function)
Это техническая деталь. Прагматически они там есть. Так что, при таких рассуждениях нужно договариваться до какой степени идёт сравнение. Если речь про возможности, то прагматика языка тоже должна учитываться даже если что-то называется или реализовано альтернативно.
Не претендуя на абсолютную истину, я для себя в какое-то время решил определять функциональность языка наличием в нем первоклассных лямбд с автоматическим замыканием лексического контекста изкоробки (не эмуляцией коллабл объектами и прочим). В этом плане Джава фя, С++ и Питон фя с ограничениями, а С и Паскаль не фя. И поддерживаю тезис "императивное с функциональным вообще не связано". Большинство фя при этом императивны, и лишь некоторые декларативны.