Next: 4.8.0 Known Issues, Previous: 4.8.0 Other Changes, Up: 4.8.0 Changes [Contents]
library(timeout), ^C, and similar methods, could cause
the process to exit abnormally. This was especially likely to happen
on Windows 11.
peek_code/[1,2] or peek_byte/[1,2] would
sometimes change the end_of_stream/1 stream property
unexpectedly, e.g., when the stream was opened with option
eof_action(eof_code).
library(mutarray).
add_breakpoint/2,
atom_concat/3,
atom_length/2,
char_code/2,
coverage_data/1,
frozen/2,
number_chars/2,
number_codes/2,
read_term/[2,3],
stream_property/2,
sub_atom/5, and
use_module/3.
use_module(Module, File, Imports) have been improved. Passing
an argument of the wrong type could have unexpected effects, e.g.,
loading the file even if it was already loaded, or changing the
type-in module. The file argument is always type-checked now. This
is consistent with what use_module/[1,2] does. This change is
unlikely to affect correct code.
write_term/3 et al. have been fixed:
Note that declaring the same operator name as both infix and postfix is disallowed by the ISO Prolog standard, and warned about in the SPIDER IDE.
, (comma) are
now bracketed when written, as required by the ISO Prolog
standard. E.g. writeq(((*),(*))) outputs ‘(*),(*)’
(it used to output ‘*,*’).
Other operators have been treated this way since release 4.3.
fy or
xfy) with precedence 1200 no longer uses parentheses around its
right argument if the right argument is written with a prefix or infix
operator with the same precedence. This was never a problem for lower
precedences.
xf or xfy) would sometimes use unneeded
parentheses around the left argument even when the operator of the
left argument had lower precedence than that of the outer term.
+, with
write_term/3 will now wrap the atom with parentheses if a
non-default priority/1 option is passed. This is for
consistency with how the ISO Prolog standard defines the precedence of
such atoms.
As before, no parentheses are used when writing atoms when a default
priority/1 option (1201) is explicitly or implicitly used.
float_integer_part/1 and
float_fractional_part/1 would sometimes wrongly accept an
integer argument.
current_input/1, current_output/1 and
stream_property/2 now merely fail if the first argument is a
closed stream, and similar cases, instead of throwing an error. This
change is for alignment with the ISO Prolog standard.
element/3 and table/2 with negative integers.