Кодт,
К>Ну почему же. Я искренне недоумевал, зачем привинчивать ФВП в тех местах, где они необязательны. "Когда в моей руке молоток, то всё вокруг кажется гвоздями".
К>Разумеется, бывают ситуации, в которых ФВП существенно упрощают жизнь: да хотя бы обработка последовательностей (большинство из операций можно выразить с помощью fold или foldr) или монадные операции.
К>Но в двух предыдущих примерах...
В двух предыдущих примерах поинт был не в том, чтобы решить ту же задачу на другом языке, а попробовать выразить те же _средства_ для решения той же задачи на другом языке.
Когда мы сравниваем 2 языка на скорость и выбираем некоторый тест, например alphablend, считается некорректным приводить другой алгоритм, не так ли (отбросим философский вопрос о нужности таких сравнений

)? А здесь такое же сравнение, только на выразительность.
К>Вот если так сформулировать вопрос: одна и та же задача более-менее равно (по количеству писанины) решается с и без ФВП. Может быть, без ФВП чуть длиннее (не в разы, а в проценты). Какие доводы за то, чтобы выбрать вариант с ФВП?
Меньше сущностей — больше ясность — гармоничнее гармония!
Вместо делегатов, колбасок

(callbacks), функторов, эмуляторов лямбд, стратегий, композитов с декораторами использовать только ФВП — разве плохо?
Но если вернуться к разговору о C++... Как мы можем в C++ выбрать вариант с ФВП? Мы можем выбрать вариант с loki:functor, boost:function или своей реализацией function, что нибудь типа
template<typename Function> // function type R (T1, T2, ..., TN),
class function
: public unary_function<R, T1> // iff N == 1
: public binary_function<R, T1, T2> // iff N == 2
{
public:
typedef R result_type;
...
R operator()(T1, T2, ..., TN) const;
};
но это по-прежнему будет просто шаблонный класс, один из многих сотен (вопрос на засыпку: насколько большое N даст всем всеобщее щастье?). И не факт, что он будет подходить во все дыры, а значит не факт, что сущности не будет плодиться, будучи отражением одной и той же идеи.
Последний пример.
Можно в принципе подумать как написать на C++ аналог Parsec (или другой библиотеки комбинаторов). Но сомневаюсь, что это будет так же красиво для пользователя. (И сомневаюсь, что будет просто).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>