kenneth e. iverson used primitives based on curry's combinators in his j programming language, a successor to apl. this enabled what iverson called tacit programming, that is, programming in functional expressions containing no variables, along with powerful tools for working with such programs. it turns out that tacit programming is possible in any apl-like language with user-defined operators.