A nondeterministic programming language is a language which can specify, at certain points in the program (called "choice points"), various alternatives for program flow. Unlike an if-then statement, the method of choice between these alternatives is not directly specified by the programmer; the program must decide at run time between the alternatives, via some general method applied to all choice points. A programmer specifies a limited number of alternatives, but the program must later choose between them. ("Choose" is, in fact, a typical name for the nondeterministic operator.) A hierarchy of choice points may be formed, with higher-level choices leading to branches that contain lower-level choices within them.
One method of choice is embodied in backtracking systems (such as Amb,David Andre; Stuart J. Russell (July 2002). "State abstraction for programmable reinforcement learning agents". Eighteenth National Conference on Artificial Intelligence: 119–125. ISBN 978-0-262-51129-2.{{cite journal}}: CS1 maint: periodical has ISBN (link)