Kõrgemat järku funktsioon

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

 Näited 

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

 Näide funktsioonist argumendina 

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äärtusena 

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

Viited

Kategooria:Programmeerimine