Sysop: | Amessyroom |
---|---|
Location: | Fayetteville, NC |
Users: | 23 |
Nodes: | 6 (0 / 6) |
Uptime: | 46:44:48 |
Calls: | 583 |
Files: | 1,138 |
Messages: | 111,067 |
Representation based comparison does seem to
work well on everything IrCOve tested, e.g.,
rCLMonkey testrCY for transitivity and anti-symmetry
with repeat counts of 10,000,000.
On the bright side, 500 more posts and we
will have 2030. But then there will be a
lready Artificial General intelligence (AGI),
which will answer all your questions in a blink.
Relieving the community from all pain and headaches.
We say that the hour of discovery cannot be
forecast, but when we say this, we imagine
that the hour is placed in an obscure and
distant future. Never occurs to us that it has
any relation to today. This day, or any day,
could be the event.
Sometimes discovery comes in circles, shows
us the dark hand of completely forgetting we
each must eventually clasp. Nothing is more
difficult than the loss of past knowledge,
especially when it is our own end
and AGI takes over.
~~ Eulogy in Final Destination, Flight 180 Crash
Mild Shock schrieb:
Hi,
Lee NaishrCOs idea for an infinite tree syntax:
/* Lee NaishrCOs idea */
naish(X, Y) :-
-a-a-a naish([], X, Y).
naish(S, X, Y) :- compound(X),
-a-a-a member(Z-Y, S), X == Z, !.
naish(S, X, Y) :- compound(X), !,
-a-a-a length(S, N),
-a-a-a X =.. [F|L],
-a-a-a maplist(naish([X-'$IDX'(N)|S]), L, R),
-a-a-a Y =.. [F|R].
naish(_, X, X).
Now define a compare:
naish_compare(C, X, Y) :-
-a-a-a naish(X, A),
-a-a-a naish(Y, B),
-a-a-a compare(C, A, B).
Works fine on this example:
?- X = s(s(1,Y),0), Y = s(s(1,X),1),
-a-a-a naish_compare(C, X, Y).
C = (>).
The residual problem is, that it is extremly slow. Much slower
than the native compare/3 which doesnrCOt use a stack, but a Union
Find structure. So conceptually total order and natural order
compare/3 are easy, the hard part is making them ultra fast!
Bye
Hi,
I hope @kuniaki.mukai will like this post.
Now that we are past this generic type of
compare/3, where rep/2 is some representation:
rep_compare(C, X, Y) :-
-a-a-a rep(X, A),
-a-a-a rep(Y, B),
-a-a-a compare(C, A, B).
We can now switch gears, and leave naish/2
behind us, and turn to Deutsch-Schorr-Waite
marking algorithm, that can give us as well
a numbering of cycle nodes:
deutsch(X, Y) :-
-a-a deutsch(X, Y, [], _).
deutsch(X, V, S, S) :- compound(X),
-a-a member(v(Z,T,Y,W), S), X == Z, !,
-a-a (var(T) -> V = Y; V = T),
-a-a W = 1.
deutsch(X, Y, S, T) :- compound(X), !,
-a-a length(S, N),
-a-a X =.. [F|L],
-a-a foldl(deutsch, L, R, [v(X,V,'$IDX'(N),W)|S], T),
-a-a Y =.. [F|R],
-a-a (var(W) -> V = Y; V = '$IDX'(N)).
deutsch(X, X, S, S).
The Schorr-Waite graph marking algorithm appeared
first in about 1968; it is also attributed to
Peter Deutsch. So I am calling the above predicate
deutsch/2 because it is a shorter name then
schorr_waite/2 or deutsch_schorr_waite/3.
Bye