Является ли лямбда типом функции более высокого порядка?

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

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

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