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


Groups > comp.lang.prolog > #14515

prolog_file_name/2 was a big mistake [Novacore]

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

Show all headers | View raw


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