Sujet : Quintus Folks were not hating Prolog that much (Was: the desease of C code overkill)
De : janburse (at) *nospam* fastmail.fm (Mild Shock)
Groupes : comp.lang.prologDate : 28. May 2025, 15:32:34
Autres entêtes
Message-ID : <10176q2$2kri$1@solani.org>
References : 1 2 3 4 5 6 7
User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0 SeaMonkey/2.53.20
Hi,
Quintus Folks were not hating Prolog that much.
If you inspect the source code you find mirriads
of utilities written in Prolog itself.
Now we find Prolog implementors which seeem to
be more in love with the host language than with
Prolog itself, they often totally miss the point,
that Prolog is a much more elegant and concise
language than their host language. Namely:
- Prolog doesn't need to declare a type of variable
- Prolog doesn't need malloc and free explicitly
- What else?
Probably some more postive properties of Prolog,
make it the ideal language to write most of a Prolog
system in Prolog itself, such as:
- The top-level including answer substitution display
- Tools such as listing/1 including annonymous variable
- What else?
Mild Shock schrieb:
I don't understand why some Prolog systems tend to gravitate
more and more into implementing everything in C. I don't see
any advantage. Take listing/1, do you get clauses faster and better
printed when you use C? Starting with the pretty/1 implementation
in Prolog itself I am pretty sure things can be enhanced. Similarly a
top level written in pure Prolog can be advantageous.
SWI-Prolog has a similar deseases of C code overkill sometimes.
The only argument for C is maybe a different datastructure for
variable_names. But the algorthm I posted on comp.lang.prolog
doesn't need a different datastructures, its just a
pairing algorithm. Running through both the term_variables
and term_singleton lists in parallel. So there is no advantage of
C code at all.
Mild Shock schrieb:
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