Ava peamenüü

Kõrgemat järku funktsioon

Kõrgemat järku funktsioon on funktsioon, mis võtab funktsioone parameetritena ja/või tagastab funktsiooni.[1]

NäitedRedigeeri

Järgnevad näited on toodud programmeerimiskeeltes Scheme ja JavaScript.

Näide funktsioonist argumendinaRedigeeri

Defineerime funktsiooni find, mis läbib massiivi ja kontrollib selle iga elemendi vastavust etteantud predikaatfunktsioonile pred. Kui pred tagastab mõne massiivielemendi korral tõeväärtuse true, siis tagastab funktsioon vastava elemendi, vastasel juhul tagastab ta tõeväärtuse false.

(define (find pred lst)
  (cond ((null? lst) #f)
        ((pred (car lst)) (car lst))
        (else (find pred (cdr lst)))))

(find (lambda (x) (> x 3)) '(1 2 3 4 5 6 7)) ;; Tagastab 4
function findInArray(pred, arr) {
    for (var i=0; i<arr.length; i++) {
        if (pred(arr[i]) {
            return arr[i];
        }
    }
    return false;
}

find(function(x){return x>10;}, [1, 2, 3, 4, 5, 6, 7]); // Tagastab false

Näide funktsioonist tagastatava väärtusenaRedigeeri

Defineerime funktsiooni negate, mis võtab funktsiooni f ja tagastab funktsiooni, mis tagastab tõeväärtuse true, kui f tagastab false, ning tõeväärtuse false, kui f tagastab true. Järgnevates näidetes oletame, et meil on olemas funktsioon even, mis tagastab true, kui selle ainsaks sisendparameetriks on paarisarv. Kasutades funktsiooni negate, loome funktsiooni odd, mis tagastab true, kui selle ainus sisendparameeter on paaritu arv:

(define negate (f)
  (lambda (x)
    (not (f x))))

(even 4) ;; Tagastab true
(even 5) ;; Tagastab false
(define odd (negate even))
(odd 4) ;; Tagastab false
(odd 5) ;; Tagastab true
function negate(f) {
    return function(x) {
        return !f(x);
    };
}

even(4); // Tagastab true
even(5); // Tagastab false
var odd = negate(even);
odd(4); // Tagastab false
odd(5); // Tagastab true

ViitedRedigeeri

  1. Kurt Nørmark. "Introduction to higher-order functions". Functional Programming in Scheme.