[**Часть 1**][1] **Часть 2** Что вы сделаете, если завтра выиграете в лотерею? Купите спортивную машину, бросите работу и поедете в турне по США? А может быть станете основателем собственной компании, приумножите состояние и купите личный самолёт? Мы все любим делать планы, и чаще всего они опираются на наше финансовое состояние. Такие планы могут быть описаны функцией. К примеру, план покупки машины это:
pair<Car, Cash> buyCar(Cash cashIn)
На входе у нас некоторое количество денег (**Cash**), а на выходе новенькая машина (**Car**) и какое-то количество(не факт, что положительное!) оставшихся финансов (**Cash**).В общем, финансовый план — это функция, которая принимает деньги и возвращает результат, плюс оставшееся количество денег. Он может быть описан шаблоном:
template<class A>
using Plan = function<pair<A, Cash>(Cash)>;
Вы можете объединять маленькие планы чтобы получить большой. К примеру, вы можете пустить оставшиеся после покупки машины средства на свою поездку или инвестировать в бизнес. Если у вас есть вещи, уже вам принадлежащие, они могут стать часть ваших планов:
template<class A>
Plan<A> got_it(A a)
{
return [a](Cash s) { return make_pair(a, s); };
}
Какое отношение имеют все эти мечты к решению нашего [пазла][2]? Ранее я говорил, что нам нужно где-то сохранять состояние, и это способ, которым программисты на функциональных языках работают с состоянием. Вместо явного модифицирования состояния они пишут код, который генерирует план действий. [Читать дальше →][3]
[1]:
http://habrahabr.ru/company/infopulse/blog/260809/
[2]:
http://habrahabr.ru/company/infopulse/blog/260809/
[3]:
http://habrahabr.ru/post/261145/#habracut