In earlier releases, some errors caused simple failures. For example,
| ?- functor(A,B,C). no
This is not logical, since it is easy to choose A, B, C such that
functor(
A,
B,
C)
is true. Generally, built-in predicates should
enumerate all their logical solutions or else raise an exception in
cases such as this one where enumeration is impractical. Thus you now
get:
| ?- functor(A,B,C). ! Instantiation error in argument 2 of functor/3 ! goal: functor(_530,_531,_532)
Existing code that relies on the old error behavior will need
modification to take this into account. The insertion of appropriate
nonvar/1
checks is usually all that is required.