Iota
Iota is a Turing tarpit designed by Chris Barker, based in combinatory logic. It uses only two symbols, *
and i
, but not every combination of them is syntactically correct; e.g. *i*ii
is correct but *iii
is not, as opposed to its "sister language" Jot in which every string of symbols is valid.
An Iota program is either an i
, or a *
followed by two Iota (sub-)programs.
Iota execution can be defined as repeating the following rewriting rules, which make use of the auxiliary subprograms k
and s
, and where x,y,z
represent subprograms:
*ix --> **xsk **kxy --> x ***sxyz --> **xz*yz
Alternatively it can be defined by translation to lambda calculus:
i = λx.xsk k = λxy.x s = λxyz.xz(yz)
*xy
where x
and y
are functions denotes the function (xy)
. These can be "nested", such that (for example) *x*yz
denotes x(yz)
.
Only the i
function and the *
operator can actually appear in a program's source code.
See also
- Jot, Iota's "sister language" from the same article
- Binary combinatory logic
- Lambda calculus
External resources
- Iota and Jot: the simplest languages? (from the Wayback Machine; retrieved on 12 November 2020)
- Lambda tutorial (interactive), by the creator of this language (from the Wayback Machine; retrieved on 26 July 2016)
- Iota and Jot (Wikipedia)