Elevator Example and the Prolog VM

In recent versions you can write

 Head[, guard] =>, $, Body.

$/0 tells the system that the body should succeed deterministically. Note that this is just an error (or warning). The compiler doesn’t do anything with it. You can also use det/1 to declare your predicates to be deterministic. Again, this is merely a pretty cheap runtime check that should help you to make your code deterministic. For 99% of the cases once/1 should be deprecated. It prunes choice points too late.