I have a predicate that is defined in two different files. Why is the definition in the first file still used, even after the second file is loaded?

When a program in a file is compiled, calls of the predicates that are defined in the same file are translated into jump instructions for the sake of efficiency. Therefore, even if new definitions are loaded, the predicates in the first file will continue to use the old definitions, unless the predicates themselves are also overwritten.

Neng-Fa Zhou 2013-01-25