A term of a combinator is either a constant, a variable, or an application of the form (A B), denoting the application of term A (a function of one argument) to term B. Application associates to the left in the absence of parentheses. All combinators can be defined as a composition of two basic combinators - S and K. These two and a third, I, are defined thus:
(S f g x) = (f x (g x)) (K x y) = x (I x) = x = (S K K x)
(B f g x) = (f (g x)) (C f g x) = (f x g) (S' c f g x) = (c (f x) (g x)) (B* c f g x) = (c (f (g x))) (C' c f g x) = (c (f x) g)
Some special-purpose computers have been built to perform combinator calculations by graph reduction[?]. Examples include the SKIM[?] ("S-K-I machine") computer, built at Cambridge University, and the multiprocessor GRIP[?] ("Graph Reduction In Parallel") computer, built at UCL.
The original version of article was based on materical from FOLDOC, used with permission.