2016-05-22 21 views
2

Update: Wie @PerMildner berichtete, die folgende Ausgabe (. Gegenwart mit SICStus Prolog 4.3) hat mit dem neuen SICStus Prolog 4.3 verschwunden. ! Weg zu gehen!SICStus Prolog: Statistiken/2 Werte von JIT betroffen


Ich verwende SICStus Prolog 4.3.2 und ich bin immer einige der statistics/2 Schlüssel zu wissen, dass ich noch nie benutzt haben ... Hier ist mein 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 sammelt einige Informationen über die Ausführung von Prädikaten wie:

boolsA([]).       
boolsA([0|Bs]) :- boolsA(Bs). 
boolsA([1|Bs]) :- boolsA(Bs). 

%% 

bool(0). 
bool(1). 

boolsB([]). 
boolsB([B|Bs]) :- bool(B), boolsB(Bs). 

ich zwei Choice fürerwartet— aber keine für ?- boolsB([0,0]).

Die Zahlen, die ich sofort erhalten, nachdem der JIT von denen, die ich bekommen unterscheiden lief sobald es fertig ist:

  • Mit 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 
    
  • Ohne 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 
    

Ich frage mich, ob obige Diskrepanz absichtlich ist ... Vielen Dank für Ihre Hilfe!

+2

Das ist der Preis für JIT-Compilation – false

+1

@ false. Ich bekomme, dass JIT nicht umsonst ist. OTOH Ich bin nur ein JIT-Benutzer, also sollte ich diese Statistikdaten wahrscheinlich nicht erhalten, es sei denn, ich frage ausdrücklich danach, ob ich die richtige, dokumentierte Schnittstelle dafür verwende. – repeat

+1

@false. Natürlich war das nicht die eigentliche Frage, die ich stellen wollte: "Wie man Nicht-Bestimmtheit quantifiziert" – repeat

Antwort

4

Der Unterschied war nicht beabsichtigt. Es sollte in der neuesten Version von SICStus Prolog (4.3.3) weg sein.

Beachten Sie, dass sich die choice_used nicht unterscheidet, noch vor SICStus 4.3.3, und dass Sie wahrscheinlich die Statistik verwenden sollten, um "Nicht-Determiniertheit" zu quantifizieren.