• Noacore is a Prolog profile that explores various relaxations

    From Mild Shock@janburse@fastmail.fm to comp.lang.prolog on Fri Mar 21 19:16:19 2025
    From Newsgroup: comp.lang.prolog

    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.

    Currently I have changed my Prolog system to tell me:

    /* Dogelog Player 1.3.1 */

    ?- current_prolog_flag(strict_iso, X).
    X = off.
    --- Synchronet 3.20c-Linux NewsLink 1.2
  • From Mild Shock@janburse@fastmail.fm to comp.lang.prolog on Fri Mar 21 19:21:36 2025
    From Newsgroup: comp.lang.prolog

    Hi,

    Somehow I have the feeling it doesn't make
    sense to only recognize floating point numbers
    as number literals that have a period in it.

    Most programming languages I have encountered
    also recognize floating point numbers when
    they have an exponent e or E in it:

    - Python:
    1e19
    1e+19

    - JavaScript:
    1e19
    10000000000000000000

    JavaScript is a little special. Since it has a
    integer subset inside there floating point numbers.
    Now I find that SWI-Prolog also allows 1e19:

    /* SWI-Prolog 9.3.20 */
    ?- X = 1e19.
    X = 1.0e+19.

    I think this is a good idea. Since there is no
    confusion. Most Prolog systems I checked never
    alias an operator e with a number:

    /* SWI-Prolog 9.3.20 */
    ?- op(500,yfx,e).
    true.

    ?- X = 1 e 2.
    X = 1 e 2.

    Bye

    Mild Shock schrieb:
    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.

    Currently I have changed my Prolog system to tell me:

    /* Dogelog Player 1.3.1 */

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

    --- Synchronet 3.20c-Linux NewsLink 1.2
  • From Mild Shock@janburse@fastmail.fm to comp.lang.prolog on Fri Mar 21 19:29:43 2025
    From Newsgroup: comp.lang.prolog

    Hi,

    Interestingly unknowningly, to facilitate JSON
    parsing, I had already partially introduced such
    numbers. Namely I have already:

    /* Dogelog Player 1.3.0 */
    ?- number_codes(X, "1e19").
    X = 1.0e19.

    SWI-Prolog consequently does the same:

    /* SWI-Prolog 9.3.20 */
    ?- number_codes(X, "1e19").
    X = 1.0e+19.

    So all that remains is change the tokenizer a little
    bit to allow 1e19. And then we can be lazy and
    write 1e19, which is the winner in length, i.e. the

    shortes variant among these variants:

    - 10.0^19
    - 10**19 /* except for SWI-Prolog 9.3.20 */
    - 1.0e19
    - 1e19

    Bye

    Mild Shock schrieb:
    Hi,

    Somehow I have the feeling it doesn't make
    sense to only recognize floating point numbers
    as number literals that have a period in it.

    Most programming languages I have encountered
    also recognize floating point numbers when
    they have an exponent e or E in it:

    - Python:
    1e19
    1e+19

    - JavaScript:
    1e19
    10000000000000000000

    JavaScript is a little special. Since it has a
    integer subset inside there floating point numbers.
    Now I find that SWI-Prolog also allows 1e19:

    /* SWI-Prolog 9.3.20 */
    ?- X = 1e19.
    X = 1.0e+19.

    I think this is a good idea. Since there is no
    confusion. Most Prolog systems I checked never
    alias an operator e with a number:

    /* SWI-Prolog 9.3.20 */
    ?- op(500,yfx,e).
    true.

    ?- X = 1 e 2.
    X = 1 e 2.

    Bye

    Mild Shock schrieb:
    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.

    Currently I have changed my Prolog system to tell me:

    /* Dogelog Player 1.3.1 */

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


    --- Synchronet 3.20c-Linux NewsLink 1.2