Функція вищого порядку

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Функція вищого порядку — функція, що приймає в якості аргументів інші функції або повертає іншу функцію в якості результату. Основна ідея полягає в тому, що функції мають той же статус, що й інші об'єкти даних.

Напріклад, функція вищого порядку може бути використона для реалізації незмінної частини алгоритму, у той час як змінна частина має бути реалізована у функції, що передаеться аргументом. Типовим прикладом може бути функція сортування данних. Сотування данних потребує порівняння екземплярів данних, яке може бути різним для різних типів данних. Без використання функції вищого порядку булоб необхідно створювати окрему функцію сортування для кожного типу данних. Але ж, зазавичай, сам алгоритм сортування не залежіть від алгоритму порівняння й залежіть ліше від результату цього порівняння. Можливість вказати, як аргумент виклику, яку саме функцію порівняння треба викорустовувати для цього виклику, дає можливість створити універсальну функцію сортування. У той же час, та ж сама функція порівняння може бути використона як аргумент й для іншіх функцій вищого порядку, напріклад, для функцій пошуку максимального чи мінімального елементу.

Використання функцій вищого порядку призводить до абстрактних і компактних програм, беручи до уваги складність вироблених ними обчислень[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

Примітки[ред.ред. код]

  1. А. Філд, П. Харрісон, Функціональне програмування, Стор. 55 [Розділ 3: Функції вищого порядку]..

Джерела[ред.ред. код]

  • А. Філд, П. Харрісон Функціональне програмування: Пер. з англ. - М.: Мир, 1993. - 637 с, іл. ISBN 5-03-001870-0.

Див. також[ред.ред. код]