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

Programmeerimine