SICStus Prolog: статистика /2 значения, затронутые JIT
Обновление: Как сообщает @PerMildner, следующая проблема (присутствует в SICStus Prolog 4.3. 2) исчезла с новым SICStus Prolog 4.3. 3! Путь!
Я использую SICStus Prolog 4.3.2 и узнаю некоторые из statistics/2
ключи, которые я не использовал раньше... Вот мой код:
:- 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
собирает некоторую информацию о выполнении предикатов, например:
boolsA([]).
boolsA([0|Bs]) :- boolsA(Bs).
boolsA([1|Bs]) :- boolsA(Bs).
%%
bool(0).
bool(1).
boolsB([]).
boolsB([B|Bs]) :- bool(B), boolsB(Bs).
Я ожидаю два варианта выбора для ?- boolsA([0,0]).
Но никто не ?- boolsB([0,0]).
Числа, которые я получаю сразу после запуска JIT, отличаются от тех, которые я получаю, как только это будет сделано:
С JIT
$ export SP_JIT = включено && sicstus %... |? - call_keys_deltas (boolsA ([0,0]), [choice_used, trail_used], Ds). Ds = [112, 904 ]?; нет |?- call_keys_deltas(boolsA([0,0]), [choice_used,trail_used], Ds). Ds = [112,16]?; нет |? - call_keys_deltas (boolsB ([0,0]), [choice_used, trail_used], Ds). Ds = [0, 1264 ]?; нет |?- call_keys_deltas(boolsB([0,0]), [choice_used,trail_used], Ds). Ds = [0,8]?; нет
Без JIT
$ export SP_JIT = отключено && sicstus % ... |?- call_keys_deltas(boolsA([0,0]), [choice_used,trail_used], Ds). Ds = [112,16]?; нет |?- call_keys_deltas(boolsA([0,0]), [choice_used,trail_used], Ds). Ds = [112,16]?; нет |?- call_keys_deltas(boolsB([0,0]), [choice_used,trail_used], Ds). Ds = [0,8]?; нет |?- call_keys_deltas(boolsB([0,0]), [choice_used,trail_used], Ds). Ds = [0,8]?; нет
Интересно, если вышеуказанное расхождение является преднамеренным... Спасибо за вашу помощь!
1 ответ
Разница не была преднамеренной. Этого не должно быть в последней версии SICStus Prolog (4.3.3).
Обратите внимание, что choice_used
не отличался даже до SICStus 4.3.3, и эту статистику, вероятно, следует использовать для "количественного определения недетерминированности".