| Deutsch English Français Italiano |
|
<100uigj$aeol$1@solani.org> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!news.nobody.at!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: =?UTF-8?Q?variable_ordering_guarantees_in_term=5fsingletons/2_=28Wa?=
=?UTF-8?Q?s:_Prolog_Development_=c3=a0_la_Sigmund_Freud=29?=
Date: Sun, 25 May 2025 09:57:10 +0200
Message-ID: <100uigj$aeol$1@solani.org>
References: <virv4c$eoih$1@solani.org> <virvig$raf2$1@solani.org>
<vis014$raku$1@solani.org> <vis06a$rapp$1@solani.org>
<100uhte$8rfn$1@solani.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Sun, 25 May 2025 07:57:07 -0000 (UTC)
Injection-Info: solani.org;
logging-data="342805"; 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.20
Cancel-Lock: sha1:wc+OWmSdOCjNydkcbSeijBOJ9rE=
X-User-ID: eJwNyUkBwDAIBEBLEMIlh7LgX0I631ExtvZraldXF7kE17hcc9risPxBXwlWnDKWiwaBBidMp6VBddy3GsMPUWcWHA==
In-Reply-To: <100uhte$8rfn$1@solani.org>
Bytes: 2776
Lines: 52
Hi,
People from Vienna were always a little strange.
Why not adopt term_singletons/2 its already around
for a while. You can do quite some magic with it.
Example: Determining singletons during listing,
from Dogelog Player library(tester/tools):
% sys_listing_write(+Term, +Stream)
sys_listing_write(C, T) :-
term_variables(C, V),
term_singletons(C, A),
sys_listing_names(V, A, 0, N),
write_term(T, C, [quoted(true), variable_names(N), format(true)]),
sys_answer_period(T).
If term_singletons/2 has the same variable ordering
guarantees, i.e. left to right, as in term_variables/2
you can use an algorithm without expensive lookup,
sys_listing_names([], _, _, []).
sys_listing_names([X|L], [Y|R], K, ['_'=X|S]) :- X==Y, !,
sys_listing_names(L, R, K, S).
sys_listing_names([X|L], A, K, [N=X|R]) :-
sys_listing_name(K, N),
J is K+1,
sys_listing_names(L, A, J, R).
Just run along the two lists , if something is both in
the term_variables/2 and term_singletons/2 list, generate
a '_' name, otherwise generate a synthetic name.
Bye
Mild Shock schrieb:
> Hi,
>
> The development of Trealla Prolog and Scryer Prolog
> looks like a random search in a mental ocean.
>
> It is like Prolog Development à la Sigmund Freud,
> you have only to dig deep enough, and a solution
>
> will pop up. Otherwise blame your mother or other
> relatives that raised you for supression.
>
> LoL
>
> Bye
>
> Examples: Still clueless how to detect singletons?
> https://github.com/trealla-prolog/trealla/issues/743