Is there room to adopt a flag strict_iso?

Interestingly a flag strict_iso could solve a few
vexing problems. For example the ISO core standard
did only mention floor/1 with signature F → I.

So in GNU Prolog I can do:

/* GNU Prolog 1.5.0 */

?- current_prolog_flag(strict_iso, X).
X = on
yes

?- X is floor(1).
uncaught exception: error(type_error(float,1),(is)/2)

?- set_prolog_flag(strict_iso, off).
yes

?- X is floor(1).
X = 1
yes

A few Prolog systems don’t share the above behavior,
like SWI-Prolog for example doesn’t throw the type error.
Also SWI-Prolog has nowhere a flag strict_iso.

The GNU Prolog definition is:

http://www.gprolog.org/manual/html_node/gprolog046.html#set-prolog-flag%2F2

As is, ISO compliance of these things is a minor issue in portability. The main issue is that the ISO core is too small and any serious program thus needs facilities that are outside the ISO core. There is still a bit of fairly common ground, but quickly we need features that are often around in most large implementations, but with serious differences in syntax and semantics. Next we have non-functional features that heavily affect porting serious applications such as differences in clause indexing, (atom) garbage collection, limits (arity, atom length, Unicode support, unbounded integers, …)

All these things are simply more important than raising an error on floor(1) and similar details. A large number of extensions are relied upon in the SWI-Prolog libraries, so a strict ISO mode should either be module specific or a lot of work needs to be done to make the libraries run in a strict ISO mode.

If you want strict ISO, use GNU Prolog or some other Prolog system that strives for that. With a few tweaks the result will run in SWI-Prolog. Porting in the other direction is typically a dead end for a serious application.

In SWI-Prolog there is already a flag “iso” . Whats the difference
between “iso” and “strict_iso” ? Maybe “iso” and “strict_iso” are just
synonyms. So when I start SWI-Prolog it tells me:

/* SWI-Prolog 9.3.20 */

?- current_prolog_flag(iso, X).
X = false.

Currently I have changed my Prolog system to tell me:

/* Dogelog Player 1.3.1 */

?- current_prolog_flag(strict_iso, X).
X = off.

Because I didn’t find a flag “iso” in GNU Prolog. Only a flag “strict_iso”
is present in GNU Prolog. And I want to be GNU Prolog compatible.
But GNU Prolog defines the effect of “strict_iso” slightly different than

what SWI-Prolog defines for “iso”. GNU Prolog affects current_predicate/1,
floor/1, etc.. whereas the SWI-Prolog “iso” flag has different scope.
According to ISO core for example this is the correct behavior:

/* GNU Prolog 1.5.0 */

?- current_predicate((is)/2).
no

But SWI-Prolog does it differently:

/* SWI-Prolog 9.3.20 */

?- current_predicate(is/2).
true.

GNU Prolog controlls the above behaviour via “strict_iso” flag.
Its not in the scope of SWI-Prolog “iso” flag:

https://www.swi-prolog.org/pldoc/man?predicate=current_prolog_flag/2