Un supercombinador es un objeto que es invariable con respecto al entorno informático y se forma dinámicamente durante la ejecución del programa. Los supercombinadores establecen un sistema de programación puramente de objetos integrado en la lógica combinatoria . Esto satisface directamente la necesidad de cálculo denotacional de instrucciones en lenguajes de programación, cuando el significado funcional del programa se expresa mediante objetos. Es esencial que el cálculo comience con algún conjunto de instrucciones previamente conocido. En el proceso de cálculo del valor del programa, se generan dinámicamente instrucciones desconocidas de antemano, pero necesarias en el camino, que además se fijan en el sistema de programación.
Un supercombinador es una expresión matemática en la que todas las variables están relacionadas y son independientes de otras expresiones. Puede ser una constante o un combinador en el que todas las subexpresiones son combinadores.
Formalmente, una expresión lambda S se considera un supercombinador de aridad n si tiene la forma λx1.λx2…λxn.E (donde n ≥ 0, por lo que los símbolos "λ" son opcionales), y la expresión E no es una abstracción lambda , pero cualquier abstracción en E es un supercombinador [1] .
Hay dos enfoques para usar supercombinadores para implementar lenguajes de programación aplicativos. Con el primero de ellos, el programa se compila utilizando un conjunto fijo de supercombinadores (en la versión no optimizada - S , K , I ) con definiciones preconocidas. En el segundo enfoque, las definiciones de los supercombinadores son generadas por el propio programa durante la compilación.