S x y z = x z (y z)
K x y = x
These terms can represent any computable function.
This is clean and simple. I don't quite see what the theory of concatenative combinators achieves beyond complicating matters with stacks and quotations to obtain some concatenative property of programs.Tha analogues of S and K in concatenative combinators are
[C] [B] [A] s == [[C] B] [C] A
[B] [A] k == A
which look a bit more complicated, but as the article says this is not even a basis:> This almost gives us completeness; however, there is no way to form "dip" or "sip" using just "s" and "k" because, roughly speaking, they provide no way to dequote items buried in the stack.
What can you express in concatenative combinators that is not as easily expressed in combinatory logic?