TECO was essentially a 2-stack implementation, where the "cursor" was simultaneously the top of the left stack and the top of the right stack.
Hmm, we can thus think of the two stacks as being: C, L1, L2, L3, L4, L5, L6, ..., Ln and C, R1, R2, R3, R4, R5, R6, ..., Rm. We can then proceed to identify the 'cursor' in each stack to obtain the following: Ln, ..., L3, L2, L1, C, R1, R2, R3, ..., Rm This seems to be equivalent to an ETM (extensible Turing machine), where the machine can insert and remove cells in the tape as well as doing the ordinary operations.
There's a simple one-combinator basis
U = ^f.fSK
This is the Iota combinator, isn't it? There is a reason why it's not as elegant as the S/K basis. Firstly, we consider expressions to be trees, and beta-reduction is the process of converting one tree to another. Initially, all leaf nodes are U. For example, the S combinator: U(U(U(UU))) Applying beta-reduction to the first term gives us: U(U(UU))SK Suddenly, our tree has *three* different types of leaf nodes. An 'interpreter' for the Iota language (expressions using just U) must therefore 'understand' the operators S and K as well as Iota. By Occam's razor, we may as well just use the S/K language. Sincerely, Adam P. Goucher