From Newsgroup: comp.lang.prolog
Hi,
Thats a nice test case, failed by Trealla Prolog
and Scryer Prolog. Currently working on fixing it
for Dogelog Player and Jekejeke Prolog:
/* SWI-Prolog 9.3.26 */
% ?- member(N,[5,10,15]), time(test3(N)), fail; true.
% % 2,007 inferences, 0.000 CPU in 0.000 seconds (0% CPU, Infinite Lips)
% % 2,012 inferences, 0.000 CPU in 0.000 seconds (0% CPU, Infinite Lips)
% % 2,017 inferences, 0.000 CPU in 0.001 seconds (0% CPU, Infinite Lips)
% true.
/* Trealla Prolog 2.80.4 */
% ?- member(N,[5,10,15]), time(test3(N)), fail; true.
% % Time elapsed 0.001s, 3020 Inferences, 4.741 MLips
% % Time elapsed 0.019s, 3030 Inferences, 0.159 MLips
% % Time elapsed 0.511s, 3040 Inferences, 0.006 MLips
% true.
/* Scryer Prolog 0.9.4-547 */
% ?- member(N,[5,10,15]), time(test3(N)), fail; true.
% % CPU time: 0.002s, 7_120 inferences
% % CPU time: 0.053s, 7_135 inferences
% % CPU time: 1.657s, 7_150 inferences
% true.
The test case:
hydra(0, n) :- !.
hydra(N, s(X,X)) :-
M is N-1,
hydra(M, X).
hydra2(0, _) :- !.
hydra2(N, s(X,X)) :-
M is N-1,
hydra2(M, X).
test3(N) :-
hydra(N,X), hydra2(1,Y),
between(1,1000,_), unify_with_occurs_check(X, Y), fail; true.
Mild Shock schrieb:
Woa! This nonsense really made my day:
https://github.com/mthom/scryer-prolog/discussions/3004
It starts with, where somebody "tried" a declarative DCG
using constraint logic programming:
number_tail(0, 0) --> [].
number_tail(Number, DigitsCount) -->
("," | ""),
digit(Digit),
number_tail(Digits, RestDigitsCount),
{
DigitsCount #= RestDigitsCount + 1,
Number #= Digit * 10 ^ RestDigitsCount + Digits
}.
He then noticed that its not deterministic. And since
it is not deterministic, clause ordering changes the
result when onced via once/1.
LoL
--- Synchronet 3.21a-Linux NewsLink 1.2