В общем, используйте язык, на котором проще всего выразить решение проблемы. Для функционального программирования это когда решение проблемы легко выражается в терминах функций , отсюда и название. Обычно это хорошо для математических операций, 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 синтаксис в других объектно-ориентированных языках - это использование замыканий, например, в Ruby.