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


Groups > comp.lang.prolog > #14517

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

From Mild Shock <janburse@fastmail.fm>
Newsgroups comp.lang.prolog
Subject Corr.: Typo (Was: The recent extension/1 addition in Dogelog Player)
Date 2025-05-25 09:39 +0200
Message-ID <100uhfo$8r5k$1@solani.org> (permalink)
References <vrkadh$7arh$1@solani.org> <vrkanf$7b21$1@solani.org> <100uget$8qmr$1@solani.org> <100uh4c$8r34$1@solani.org>

Show all headers | View raw


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

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