Чтобы ответить на ваш последний вопрос, стиль передачи продолжения - это не то же самое, что карри. Вы каррируете, когда создаете функцию из другой функции, указывая один или несколько ее параметров, таким образом получая функцию с меньшим количеством параметров. Карринг в функциональном языке программирования, таком как F # и C # в некоторой степени, позволяет вам рассматривать все функции как функции одной переменной. Если указанная функция имеет более одного параметра, то ее можно рассматривать как имеющую параметр и возвращающую другую функцию с оставшимися параметрами. Это пример карри в c #:
public static class FuncExtensions
{
public static Func<A, Func<R>> Curry<A, R>(this Func<A, R> f)
{
return a => () => f(a);
}
}
Func<int, int> f = x => x + 1;
Func<int> curried = f.Curry()(1);
Там, где функция curry всегда будет возвращаться 2. Конечно, есть и более полезные варианты использования.
Что касается стиля передачи продолжения, в дополнение к блогу Уэса Дайера, на который есть ссылка, рассмотрите асинхронные рабочие процессы F #, которые являются экземплярами продолжений или монадой продолжения. Вы можете попытаться использовать термин «монада продолжения», чтобы найти дополнительные статьи.