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