Функция высшего порядка

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Фу́нкция вы́сшего поря́дка — функция, принимающая в качестве аргументов другие функции или возвращающая другую функцию в качестве результата. Основная идея состоит в том, что функции имеют тот же статус, что и другие объекты данных. Использование функций высшего порядка приводит к абстрактным и компактным программам, принимая во внимание сложность производимых ими вычислений.[1] Иногда функции высшего порядка называют функционалами, хотя это не совсем верно, более точный эквивалент — оператор.

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

Пример[править | править вики-текст]

Следующий исходный текст, написанный на Python, содержит функцию высшего порядка g(), которая в качестве первого аргумента принимает функцию. В результате на экран будет выведено «100» (результат вычисления (7+3)×(7+3)).

def f(x):
    return x + 3
 
def g(function, x):
    return function(x) * function(x)
 
print g(f, 7)

Та же программа на F#, здесь f — функция высшего порядка, принимающая функцию func в качестве параметра.

let f func x = (func x) * (func x)
 
let f2 a = a+3
f f2 7

Тот же код, написанный на языке Ruby.

Вариант 1. Использования lambda-объекта.

f = ->(x) { x+3 }
def g (f, x); f.call( x ) * f.call( x ) end
 
puts g f,7

Вариант 2. Использование блока для подстановки анонимной функции.

def g x; (yield x) * (yield x) end
 
puts g(7){|x| x+3}

На Clojure.

(defn g [f x]
  (* (f x) (f x)))
 
(print (g #(+ 3 %) 7))

То же самое на Haskell.

f func a = (func x) * (func x)
main = putStrLn (show (f (+3) 7))

И на JavaScript

var f = function (func, x) {
  return func(x) * func(x);
};
console.log(f(function (x) {return x + 3;}, 7));

Примечания[править | править вики-текст]

  1. А. Филд, П. Харрисон Функциональное программирование: Пер. с англ. — М.: Мир, 1993. — 637 с, ил. ISBN 5-03-001870-0. Стр. 55 [Глава 3: Функции высшего порядка].