Deutsch   English   Français   Italiano  
<103c0bk$168hc$3@solani.org>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: news.eternal-september.org!eternal-september.org!feeder3.eternal-september.org!2.eu.feeder.erje.net!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.solani.org!.POSTED!not-for-mail
From: Mild Shock <janburse@fastmail.fm>
Newsgroups: comp.lang.prolog
Subject: The beauty of a double hook (Was: SWI-Prolog master not wide awake,
 doing day-sleeping)
Date: Mon, 23 Jun 2025 18:45:42 +0200
Message-ID: <103c0bk$168hc$3@solani.org>
References: <vpceij$is1s$1@solani.org> <103bos1$164mt$1@solani.org>
 <103bpdh$164t1$1@solani.org> <103bqc8$165f2$1@solani.org>
 <103c072$168hc$1@solani.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Mon, 23 Jun 2025 16:45:40 -0000 (UTC)
Injection-Info: solani.org;
	logging-data="1253932"; mail-complaints-to="abuse@news.solani.org"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101
 Firefox/128.0 SeaMonkey/2.53.21
Cancel-Lock: sha1:UyGGBF3V0omr+d9Em7FB7UIEZNM=
In-Reply-To: <103c072$168hc$1@solani.org>
X-User-ID: eJwNysERBDEIA7CW4GJMKCfAuP8S9vRWHDonwSBCIWbt9E3V1jkYczzbmF8Hr5qJ2+qGD9O0eMElXglp/+QfVucVnA==


Since it has a double hook, works fine simultaneously:

?- set_portray_text(enabled, false).
true.

?- X = [a,b,c].
X = [a, b, c].

?- X = [0'a,0'b,0'c].
X = [97, 98, 99].

And then:

?- set_prolog_flag(double_quotes, codes).
true.

?- set_prolog_flag(back_quotes, chars).
true.

?- set_portray_text(enabled, true).
true.

?- X = [a,b,c].
X = `abc`.

?- X = [0'a,0'b,0'c].
X = "abc".

Mild Shock schrieb:
> Hi,
> 
> Even the SWI-Prolog master not wide awake,
> doing day-sleeping.
> 
>  > I don’t know whether they realised that you
>  > cannot meaningfully support both in the same
>  > system and surely not in the same application.
> 
> Maybe you didn’t notice this nifty detail.
> Thats all you need:
> 
>  > The ISO core standard is silent about a flag back_quotes
> 
>  > Its more a naming problem. Have two libraries
> library(portray_codes) and library(portray_chars),
> Or one library(portray_text).
> 
> Just add one more rule:
> 
> user:portray(Chars) :-
>      portray_text_option(enabled, true),
>      '$skip_list'(Length, Chars, _Tail),
>      portray_text_option(min_length, MinLen),
>      Length >= MinLen,
>      mostly_chars(Chars, 0.9),
>      portray_text_option(ellipsis, IfLonger),
>      quote2(C),
>      put_code(C),
>      maplist(char_code, Chars, Codes),
>      (   Length > IfLonger
>      ->  First is IfLonger - 5,
>          Skip is Length - 5,
>          skip_first(Skip, Codes, Rest),
>          put_n_codes(First, Codes, C),
>          format('...', [])
>      ;   Rest = Codes
>      ),
>      put_var_codes(Rest, C),
>      put_code(C).
> 
> The use of maplist/3 is elegant, and works since we do
> not print open lists, right?
> 
> Mild Shock schrieb:
>> Hi,
>>
>> The most radical approach is Novacore from
>> Dogelog Player. It consists of the following
>> major incisions in the ISO core standard:
>>
>> - We do not forbid chars, like for example
>>    using lists of the form [a,b,c], we also
>>    provide char_code/2 predicate bidirectionally.
>>
>> - We do not provide and _chars built-in
>>    predicates also there is nothing _strings. The
>>    Prolog system is clever enough to not put
>>    every atom it sees in an atom table. There
>>    is only a predicate table.
>>
>> - Some host languages have garbage collection that
>>    deduplicates Strings. For example some Java
>>    versions have an options to do that. But we
>>    do not have any efforts to deduplicate atoms,
>>    which are simply plain strings.
>>
>> - Some languages have constant pools. For example
>>    the Java byte code format includes a constant
>>    pool in every class header. We do not do that
>>    during transpilation , but we could of course.
>>    But it begs the question, why only deduplicate
>>    strings and not other constant expressions as well?
>>
>> - We are totally happy that we have only codes,
>>    there are chances that the host languages use
>>    tagged pointers to represent them. So they
>>    are represented similar to the tagged pointers
>>    in SWI-Prolog which works for small integers.
>>
>> - But the tagged pointer argument is moot,
>>    since atom length=1 entities can be also
>>    represented as tagged pointers, and some
>>    programming languages do that. Dogelog Player
>>    would use such tagged pointers without
>>    poluting the atom table.
>>
>> - What else?
>>
>> Bye
>>
>> Mild Shock schrieb:
>>>
>>> Technically SWI-Prolog doesn't prefer codes.
>>> Library `library(pure_input)` might prefer codes.
>>> But this is again an issue of improving the
>>> library by some non existent SWI-Prolog community.
>>>
>>> The ISO core standard is silent about a flag
>>> back_quotes, but has a lot of API requirements
>>> that support both codes and chars, for example it
>>> requires atom_codes/2 and atom_chars/2.
>>>
>>> Implementation wise there can be an issue,
>>> like one might decide to implement the atoms
>>> of length=1 more efficiently, since with Unicode
>>> there is now an explosion.
>>>
>>> Not sure whether Trealla Prolog and Scryer
>>> Prolog thought about this problem, that the
>>> atom table gets quite large. Whereas codes don't
>>> eat the atom table. Maybe they forbit predicates
>>>
>>> that have an atom of length=1 head:
>>>
>>> h(X) :-
>>>      write('Hello '), write(X), write('!'), nl.
>>>
>>> Does this still work?
>>>
>>> Mild Shock schrieb:
>>>> Concerning library(portray_text) which is in limbo:
>>>>
>>>>  > Libraries are (often) written for either
>>>> and thus the libraries make the choice.
>>>>
>>>> But who writes these libraries? The SWI Prolog
>>>> community. And who doesn’t improve these libraries,
>>>> instead floods the web with workaround tips?
>>>> The SWI Prolog community.
>>>>
>>>> Conclusion the SWI-Prolog community has itself
>>>> trapped in an ancient status quo, creating an island.
>>>> Cannot improve its own tooling, is not willing
>>>> to support code from else where that uses chars.
>>>>
>>>> Same with the missed AI Boom.
>>>>
>>>> (*) Code from elsewhere is dangerous, People
>>>> might use other Prolog systems than only SWI-Prolog,
>>>> like for exampe Trealla Prolog and Scryer Prolog.
>>>>
>>>> (**) Keeping the status quo is comfy. No need to
>>>> think in terms of programm code. Its like biology
>>>> teachers versus pathology staff, biology teachers
>>>> do not everyday see opened corpses.
>>>>
>>>>
========== REMAINDER OF ARTICLE TRUNCATED ==========