Mise à jour: Tel que rapporté par @PerMildner, la question ci-dessous (. Présent avec SICStus Prolog 4.3) a disparu avec la nouvelle SICStus Prolog 4.3. ! Way to go!SICStus Prolog: statistiques/2 valeurs affectées par JIT
J'utilise SICStus Prolog 4.3.2 et je suis apprendre à connaître quelques-unes des statistics/2
clés que je ne l'ai pas utilisé avant ... Voici mon code:
:- use_module(library(lists)).
a_is_b_minus_c(A,B,C) :-
A is B-C.
call_keys_deltas(Goal_0, Keys, Deltas) :-
maplist(statistics, Keys, Values0),
call(Goal_0),
maplist(statistics, Keys, Values1),
maplist(a_is_b_minus_c, Deltas, Values1, Values0).
call_keys_deltas/3
rassemble des informations sur l'exécution des prédicats comme:
boolsA([]).
boolsA([0|Bs]) :- boolsA(Bs).
boolsA([1|Bs]) :- boolsA(Bs).
%%
bool(0).
bool(1).
boolsB([]).
boolsB([B|Bs]) :- bool(B), boolsB(Bs).
J'attends deux choicepoints pour ?- boolsA([0,0]).
— mais aucun pour ?- boolsB([0,0]).
Les chiffres que je reçois immédiatement après le JIT couru diffèrent de ceux que je reçois une fois qu'il est fait:
Avec JIT
$ export SP_JIT=enabled && sicstus % ... | ?- call_keys_deltas(boolsA([0,0]), [choice_used,trail_used], Ds). Ds = [112,904] ? ; no | ?- call_keys_deltas(boolsA([0,0]), [choice_used,trail_used], Ds). Ds = [112,16] ? ; no | ?- call_keys_deltas(boolsB([0,0]), [choice_used,trail_used], Ds). Ds = [0,1264] ? ; no | ?- call_keys_deltas(boolsB([0,0]), [choice_used,trail_used], Ds). Ds = [0,8] ? ; no
Sans JIT
$ export SP_JIT=disabled && sicstus % ... | ?- call_keys_deltas(boolsA([0,0]), [choice_used,trail_used], Ds). Ds = [112,16] ? ; no | ?- call_keys_deltas(boolsA([0,0]), [choice_used,trail_used], Ds). Ds = [112,16] ? ; no | ?- call_keys_deltas(boolsB([0,0]), [choice_used,trail_used], Ds). Ds = [0,8] ? ; no | ?- call_keys_deltas(boolsB([0,0]), [choice_used,trail_used], Ds). Ds = [0,8] ? ; no
Je me demande si la divergence ci-dessus est intentionnelle ... Merci pour votre aide!
C'est le prix pour JIT-compilation – false
@false. Je comprends que JIT ne vient pas gratuitement. OTOH Je ne suis qu'un utilisateur de JIT, donc je ne devrais probablement pas obtenir ces données statistiques à moins que je ne le demande spécifiquement en utilisant la bonne interface documentée pour cela. – repeat
@false. Bien sûr, ce n'était pas la vraie question que je voulais poser: "Comment quantifier la non-déterminisme" – repeat