call_cleanup/2, which could be arbitrarily slow.
call_cleanup/2is now called as if by
once/1. This means that it cannot leave any choice points behind.
For Cleanup goals called as the result of
!, this change was
introduced already in release 4.7.
The documentation used to warn that if exiting non-determinately from the Cleanup “unexpected behavior may result”. Now this is no longer possible. This is an incompatible change but we do not expect this to affect any correct code.
call/1and similar constructs, are faster.
length/2used to loop for certain incorrect calls, like
length([a,b|L],L). Instead it will now immediately throw an out of memory error, which is what would eventually have happened anyway. This is similar to how some other incorrect argument combinations are already handled.
Prior to release 4.8 the behavior was:
| ?- (write('Hello\n'); write('World\n')). Hello yes
i.e. the second alternative was never run.
In release 4.8 this changed so that the user can decide how to proceed after the first solution:
| ?- (write('Hello\n'); write('World\n')). Hello true ? ; World yes
i.e. the second alternative is run if the user asks for more solutions.
process:process_create/[2,3], and to let the sub-process use the standard streams in the expected way.
The following changes have been made to enable this new feature:
sicstusis invoked with the -i option. This means that the SICStus process will no longer “steal” input from the sub-process while the sub-process in running (unless something, like the SICStus top level, also tries to read from the standard input stream).
process:process_create/3has changed so that the
stdin(…)option always defaults to
stdas documented. Prior to this release the default value was
wait/1option was specified. If you want to use a null stream, you can explicitly pass the option
process:process_create/[2,3], on Windows, now gives the sub-process access to the parent (SICStus) process’s “console window”. This lets the sub-process read from, and write to, the console window, which is particularly useful if the sub-process is an interactive program, like a shell.
open/[3,4]leaves too many files open.
resource_errorhas been added,
file_handle, which is thrown when attempting to open too many files. See Resource Errors in the SICStus Prolog Manual for details.
prolog:undo/1has been removed. In many cases
call_cleanup/2can be used for a similar purpose. Contact us if this is a problem.
PATH. Instead the path to sicstus.msc can be passed directly to the command line tool
minizinc(with --solver), or the library/zinc/ directory can be added to the the MiniZincIDE preferences. See Zinc Prerequisites in the SICStus Prolog Manual for details.
bags:memberchk/3have been deprecated, and may be removed in a future release. They have been replaced by