Kõrgemat järku funktsioon

Allikas: Vikipeedia

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

Näited[muuda | redigeeri lähteteksti]

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

Näide funktsioonist argumendina[muuda | redigeeri lähteteksti]

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[muuda | redigeeri lähteteksti]

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[muuda | redigeeri lähteteksti]

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