Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.prolog > #14516
| 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> |
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 | Next — Previous in thread | Next in thread | Find similar | Unroll 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