Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.prolog > #14516

The recent extension/1 addition in Dogelog Player (Was: prolog_file_name/2 was a big mistake [Novacore])

From Mild Shock <janburse@fastmail.fm>
Newsgroups comp.lang.prolog
Subject The recent extension/1 addition in Dogelog Player (Was: prolog_file_name/2 was a big mistake [Novacore])
Date 2025-05-25 09:33 +0200
Message-ID <100uh4c$8r34$1@solani.org> (permalink)
References <vrkadh$7arh$1@solani.org> <vrkanf$7b21$1@solani.org> <100uget$8qmr$1@solani.org>

Show all headers | View raw


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.
>>
> 

Back to comp.lang.prolog | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Noacore is a Prolog profile that explores various relaxations Mild Shock <janburse@fastmail.fm> - 2025-03-21 19:16 +0100
  What about allowing numbers 1e19, etc.. (Re: Novacore is a Prolog profile that explores various relaxations) Mild Shock <janburse@fastmail.fm> - 2025-03-21 19:21 +0100
    Re: What about allowing numbers 1e19, etc.. (Re: Novacore is a Prolog profile that explores various relaxations) Mild Shock <janburse@fastmail.fm> - 2025-03-21 19:29 +0100
    prolog_file_name/2 was a big mistake [Novacore] Mild Shock <janburse@fastmail.fm> - 2025-05-25 09:22 +0200
      The recent extension/1 addition in Dogelog Player (Was: prolog_file_name/2 was a big mistake [Novacore]) Mild Shock <janburse@fastmail.fm> - 2025-05-25 09:33 +0200
        Corr.: Typo (Was: The recent extension/1 addition in Dogelog Player) Mild Shock <janburse@fastmail.fm> - 2025-05-25 09:39 +0200
  How difficult is a Knowledbase notion? (Was: Novacore is a Prolog profile that explores various relaxations) Mild Shock <janburse@fastmail.fm> - 2025-07-02 09:33 +0200
    C++ programming or a PhD in Macro defs (Was: How difficult is a Knowledbase notion?) Mild Shock <janburse@fastmail.fm> - 2025-07-02 09:35 +0200
      Workers never had the blessing of Paul Tarau [Prolog missed Web 2.0] (Was: C++ programming or a PhD in Macro defs) Mild Shock <janburse@fastmail.fm> - 2025-07-02 09:49 +0200
        General Magic didn't predict the Future (Was: Workers never had the blessing of Paul Tarau [Prolog missed Web 2.0]) Mild Shock <janburse@fastmail.fm> - 2025-07-02 10:07 +0200
          Antique Programming Style versus Modern Programming Style [SWI-Prolog] (Was: Workers never had the blessing of Paul Tarau [Prolog missed Web 2.0]) Mild Shock <janburse@fastmail.fm> - 2025-07-02 15:54 +0200
            Grand mothers kitchen is nevertheless the best, who knows? (Was: Antique Programming Style versus Modern Programming Style [SWI-Prolog]) Mild Shock <janburse@fastmail.fm> - 2025-07-02 16:06 +0200

csiph-web