The interpreter looks ahead up
to the last choice point in each branch of the program
(say, between alternative primitive actions), makes the choice
and then proceeds backwards recursively, deciding at each choice point
what branch is optimal.
A program begins with a deterministic action a.
A program begins with the nondeterministic choice of
two programs.
Conditionals, recursive procedures and while loops
can be specified as well.