Ответ 1
отличная запись на CPS в контексте С# была сделана Уэсом Дайером. Не думаю, что я мог бы добавить что-то содержательное. Если какие-то конкретные вещи там неясны, продолжайте и спросите о них.
Я читал о методе программирования стиля продолжения прохождения (реализация С# 3.0).
Почему/когда было бы полезно использовать эту технику?
Как я могу реализовать это, чтобы получить эти действительно длинные цепочки? Это то же самое, что и currying (что дает некоторые лучшие результаты поиска в google)?
Спасибо
отличная запись на CPS в контексте С# была сделана Уэсом Дайером. Не думаю, что я мог бы добавить что-то содержательное. Если какие-то конкретные вещи там неясны, продолжайте и спросите о них.
Чтобы ответить на ваш последний вопрос, стиль продолжения прохождения - это не то же самое, что и карри. Вы играете, когда вы создаете функцию из другой функции, указывая один или несколько ее параметров, тем самым получая функцию с меньшим количеством параметров. Каррирование на языке функционального программирования, например, F # и С#, позволяет рассматривать все функции как функцию одной переменной. Если указанная функция имеет более одного параметра, ее можно рассматривать как имеющую параметр и возвращая другую функцию с оставшимися параметрами. Это пример currying в С#:
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);
Если функция curried всегда будет возвращаться 2. Конечно, это более просветительское использование.
Что касается стиля продолжения передачи, в дополнение к блогу Wes Dyer, связанному с ним, посмотрите на рабочие процессы F # async, которые являются примерами продолжений или продолжением монады. Вы можете попытаться использовать термин продолжение монады, чтобы найти дополнительные статьи.