Каково преимущество Приправления карри в C#? (достижение частичной функции)

Каково преимущество Приправления карри в C#?

Каково преимущество достижения частичного функционального приложения на функции с приправой карри?

16
задан masoud ramezani 8 March 2010 в 14:57
поделиться

3 ответа

Преимущество каррирования в C # состоит в том, что он позволяет разработчикам на C # разрабатывать в стиле функционального программирования.

Подумайте о LINQ. Запрос LINQ позволяет передавать метод в качестве параметра:

someCollection.Where(x => x.someVal == 1);

x.someVal == 1 оценивается как функция, а затем , где использует возвращаемое значение в своем собственном выполнении.

Это пример, с которым знакомо большинство разработчиков .NET 3, но немногие понимают, что они балуются программированием функций. Без способности Карри LINQ был бы невозможен.

... обнадеживаю, что компенсирует мой глупый комментарий.

1
ответ дан 30 November 2019 в 21:28
поделиться

Если ваш вопрос заключался в том, как реализовать каррирование в C #, вот пример

public Func<T1, Func<T2, TResult>> Curry<T1, T2, TResult>(Func<T1, T2, TResult> func)
    {
        return p1 => p2 => func(p1, p2);
    }

Каррирование может быть реализовано на любом языке, который поддерживает замыкания. (лямбда-выражения) и полезен для частичного приложения функции, например, в программировании пользовательского интерфейса, где не принимаются все входные данные, необходимые для выполнения функции, поэтому каррированная функция передается с уже полученными входными данными, захваченными в ней.

12
ответ дан 30 November 2019 в 21:28
поделиться

Из Википедия

Каррирование на самом деле не очень отличается от того, что мы делаем, когда вычисляем функцию для некоторых заданных значений на листе бумаги. .

Возьмите функцию f (x, y) = y / x

Чтобы вычислить f (2,3) , сначала замените x на 2 .

Поскольку результатом является новая функция в y, эта функция g (y) может быть определена как

g (y) = f (2, y) = y / 2

Затем, заменив y аргумент с 3 ,

дает результат g (3) = f (2,3) = 3/2 .

На бумаге, используя классические обозначения, просто кажется, что мы делаем все это одновременно . Но на самом деле, когда заменяют аргументы на листе , это делается последовательно (т.е. частично). Каждая замена приводит к функции внутри функции . По мере того как мы последовательно заменяем каждый аргумент, мы преобразуем функцию в более простые и простые версии оригинала. В конце концов, мы получаем цепочку функций как в лямбда-исчислении, где каждая функция принимает только один аргумент, а функции с несколькими аргументами обычно в карри.

Практическая мотивация каррирования заключается в том, что очень часто функции получаются путем передачи некоторых, но не всех аргументов каррированной функции (часто называется частичным применением) полезны; например, во многих языках есть функция или оператор, аналогичный plus_one. Каррирование упрощает определение этих функций.

13
ответ дан 30 November 2019 в 21:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: