В общем, используйте язык, на котором проще всего выразить решение проблемы. Для функционального программирования это когда решение проблемы легко выражается через функции , отсюда и название. Обычно это хорошо для математических операций, AI, сопоставления с образцом; в общем, все, что может быть разбито на набор правил, которые должны применяться для получения ответа. Вы действительно можете определить «лучший» язык для использования только после того, как достаточно проанализировали свою проблему. Здесь псевдокод пригодится. Если вы пишете псевдокод, похожий на FP, используйте FP.
Конечно, все законченные языки программирования функционально эквивалентны, поэтому на самом деле не имеет значения, какой из них вы выберете с точки зрения того, какие проблемы вы можете решить. Основными эффектами будут эффективность и точность кодирования, а также простота обслуживания.
Обратите внимание также на то, что возможно имитировать FP в ОО-языках через искусно разработанные API. Например, я видел множество библиотек Java (пример JMock), которые используют цепочку методов для имитации FP DSL. Тогда вы увидите такие конструкции, как:
logger.expects(once()).method("error")
.with( and(stringContains(action),stringContains(cause)) );
По сути, это строит функцию, которая оценивается, чтобы определить, является ли какая-то вызывающая последовательность на ложном объекте корректной. (пример украден у http://www.jmock.org/yoga.html)
Другим FP-подобным синтаксисом в других языках OO является использование замыканий, например в Ruby.