Error Reporting/Handling

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.