Corr.: Typo (Was: The recent extension/1 addition in Dogelog Player)

Liste des GroupesRevenir à cl prolog 
Sujet : Corr.: Typo (Was: The recent extension/1 addition in Dogelog Player)
De : janburse (at) *nospam* fastmail.fm (Mild Shock)
Groupes : comp.lang.prolog
Date : 25. May 2025, 08:39:39
Autres entêtes
Message-ID : <100uhfo$8r5k$1@solani.org>
References : 1 2 3 4
User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0 SeaMonkey/2.53.20
Corr.: Typo
This here:
Here is a test case, since existence is tested, it also
Should read:
Here is a test case, since existence is NOT tested, it also
Mild Shock schrieb:
Hi,
 The solution for Novacore is as follows:
 - absolute_file_name/[2,3] does NOT check existence,
   neither through failure nor through an error
 - ONLY file_property/2 does check for existence,
   also available in GNU Prolog:
http://www.gprolog.org/manual/gprolog.html#file-property%2F2
 - There is a tamer extension/1 option in absolute_file_name/3,
   which checks the file base name, and does add the given
   extension, if it does not yet have an extension.
    Here is a test case, since existence is tested, it also
   works with a server www.foo.com, which might not be reachable,
   and because it looks for the file base name, the server name
    which has a dot, doesn't confuse absolute_file_name/3 to assume
   that there is already an extension, and bar is correctly
   extended to bar.p:
     absolute_file_name('http://www.foo.com/bar', X, [extension('.p')]),
    X == 'http://www.foo.com/bar.p'.
 - In Dogelog Player include/1, ensure_loaded/1, etc.. use
   extension('.p'), other Prolog systems might use extension('.pro')
   or extension('.pl'), this is just a top-level convenience,
   and allows more convention:
 ?- [bar]
 - For portable code, the recommendation is to include the extension.
   This was enforced in Dogelog Player up to release 1.3.2, since
   it didn't have the extension/1 option. From release 1.3.3 this
   remains a best practice, but is not anymore enforced.
 :- ensure_loaded('bar.p').
 Bye
 Mild Shock schrieb:
Hi,
>
The GNU Prolog specification of prolog_file_name/2
was a big mistake. It reads as follows:
>
prolog_file_name(File1, File2) unifies File2 with the
Prolog file name associated with File1. More precisely
File2 is computed as follows:
>
- if File1 has a suffix or if it is user then File2
   is unified with File1.
- else if the file whose name is File1 + ’.pl’ exists
   then File2 is    unified with this name.
- else if the file whose name is File1 + ’.pro’ exists
   then File2 is unified with this name.
- else if the file whose name is File1 + ’.prolog’ exists
   then File2 is unified with this name.
- else File2 is unified with the name File1 + ’.pl’.
>
This predicate uses absolute_file_name/2 to check the existence of a file (section 8.26.1).
>
http://www.gprolog.org/manual/html_node/gprolog050.html#hevea_default836
>
It was adopted by SWI-Prolog and made parameterizable through
absolute_file_name/3:
>
https://www.swi-prolog.org/pldoc/doc_for?object=absolute_file_name/3
>
The big mistake is the existence check. In a web context
it requires a server rountrip or something. And since there are
3 existence checks, its 3 server rountrips possibly HEAD requests.
>
Formerly Jekejeke Prolog suffered from this problem. Now
with Dogelog Player and as part of Novacore we wanted to
do something else. What is the solution?
>
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.
>
>
 

Date Sujet#  Auteur
21 Mar 25 * Noacore is a Prolog profile that explores various relaxations6Mild Shock
21 Mar 25 `* What about allowing numbers 1e19, etc.. (Re: Novacore is a Prolog profile that explores various relaxations)5Mild Shock
21 Mar 25  +- Re: What about allowing numbers 1e19, etc.. (Re: Novacore is a Prolog profile that explores various relaxations)1Mild Shock
25 May08:22  `* prolog_file_name/2 was a big mistake [Novacore]3Mild Shock
25 May08:33   `* The recent extension/1 addition in Dogelog Player (Was: prolog_file_name/2 was a big mistake [Novacore])2Mild Shock
25 May08:39    `- Corr.: Typo (Was: The recent extension/1 addition in Dogelog Player)1Mild Shock

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal