Является ли лямбда типом функции высшего порядка? - PullRequest
12 голосов
/ 15 февраля 2011

Я видел этот вопрос на одном из рабочих постов, в котором он спрашивал, что такое лямбда-функция и как она связана с функцией более высокого порядка.Я уже знаю, как использовать лямбда-функцию, но не совсем уверен, объясняя это, поэтому я немного погуглил и обнаружил следующее: Что такое лямбда (функция)? и это http://en.wikipedia.org/wiki/Higher-order_function

определение HOF, которое гласит, что, по крайней мере, должна принимать одну или несколько функций или возвращать функцию, соответствующую лямбде, так что мой вопрос: является ли лямбда типом HOF?

Или любой, кто мог бы объяснить ихОтношение дальше?

Ответы [ 3 ]

18 голосов
/ 15 февраля 2011

Определение HOF, которое гласит, что, по крайней мере, должно принимать одну или несколько функций или возвращать функцию, которая соответствует лямбде

Это так?(lambda (x) (x+1)) (или x => x+1 или \x -> x+1 или fun x -> x+1, в зависимости от синтаксиса вашего языка) является лямбда-выражением.Однако она не принимает функцию в качестве аргумента (она принимает целое число) и не возвращает ее.

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

Лямбда - это анонимная функция.Как таковая, это функция.Но это только функция высшего порядка, если она принимает или возвращает функцию, чего нет у большинства лямбд.Однако лямбды чаще всего используются в качестве аргументов для высших функций (т. Е. Если вы делаете Where(s => s.Length > 5) Where - это функция высшего порядка, а s => s.Length > 5 - это лямбда (первого порядка)), поэтому они связаны.

5 голосов
/ 15 февраля 2011

Это зависит от того, что вы подразумеваете под "лямбда".

Следующий абзац со страницы Википедии, на которую вы ссылались, четко описывает отношения с теоретической точки зрения типа.

"В нетипизированном лямбда-исчислении все функции вышеВ типизированном лямбда-исчислении, из которого происходит большинство функциональных языков программирования, функции высшего порядка обычно представляют собой функции с типами, содержащими более одной стрелки.В функциональном программировании функции высшего порядка, которые возвращают другие функции, называются карри."

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

Если мы говорим о конструкции "лямбда", реализованной некоторыми языками программирования, то это зависит от 1) фактического языка, о котором вы говорите, и 2)на конкретное использование на определенном языке.

В языках, где лямбда-выражения являются анонимными функциями первого класса, можно ожидать, что они будут способны выражать функции высшего порядка.Но функция более высокого порядка - это функция, которая принимает другие функции в качестве аргументов и / или возвращает их в качестве результатов.И не все случаи использования «лямбды» в приложении делают это.

0 голосов
/ 15 февраля 2011

Лямбда-синтаксис облегчает реализацию функций высшего порядка.Например, каррирование - это функция высшего порядка, упрощенная с помощью лямбда-синтаксиса.

Возможно, вы хотите изучить лямбда-оператор , чтобы понять функции высшего порядка.

...