Un supercombinator este un obiect care este invariant în raport cu mediul de calcul și este format dinamic în timpul execuției programului. Supercombinatoarele stabilesc un sistem de programare pur obiect construit în logica combinatorie . Acest lucru satisface în mod direct nevoia de calcul denotațional al instrucțiunilor în limbaje de programare, atunci când sensul funcțional al programului este exprimat prin obiecte. Este esențial ca calculul să înceapă cu un set de instrucțiuni cunoscut anterior. În procesul de calcul al valorii programului, instrucțiunile care sunt necunoscute în prealabil, dar necesare pe parcurs, sunt generate dinamic, care sunt fixate suplimentar în sistemul de programare.
Un supercombinator este o expresie matematică în care toate variabilele sunt legate și independente de alte expresii. Poate fi o constantă sau un combinator în care toate subexpresiile sunt combinatoare.
Formal, o expresie lambda S este considerată un supercombinator de aritate n dacă are forma λx1.λx2…λxn.E (unde n ≥ 0, deci simbolurile „λ” sunt opționale), iar expresia E nu este o abstractizare lambda , dar orice abstractizare din E este un supercombinator [1] .
Există două abordări pentru utilizarea supercombinatoarelor pentru a implementa limbaje de programare aplicative. Cu primul dintre ele, programul este compilat folosind un set fix de supercombinatoare (în versiunea neoptimizată - S , K , I ) cu definiții pre-cunoscute. În a doua abordare, definițiile supercombinatoarelor sunt generate de programul însuși în timpul compilării.