Skip to content

setof/3 much too slow #3186

@UWN

Description

@UWN
?- length(L,N), time(countall(setof(t,permutation(L,L),[t]),CntS)).
   % CPU time: 0.000s, 285 inferences
   L = [], N = 0, CntS = 1
;  % CPU time: 0.000s, 377 inferences
   L = [_A], N = 1, CntS = 1
;  % CPU time: 0.000s, 466 inferences
   L = [_A,_B], N = 2, CntS = 2
;  % CPU time: 0.001s, 1_160 inferences
   L = [_A,_B,_C], N = 3, CntS = 5
;  % CPU time: 0.006s, 9_696 inferences
   L = [_A,_B,_C,_D], N = 4, CntS = 15
;  % CPU time: 0.079s, 164_374 inferences
   L = [_A,_B,_C,_D,_E], N = 5, CntS = 52
;  % CPU time: 1.849s, 3_998_725 inferences
   L = [_A,_B,_C,_D,_E,_F], N = 6, CntS = 203
;  % CPU time: 59.779s, 126_965_911 inferences
   L = [_A,_B,_C,_D,_E,_F,_G], N = 7, CntS = 877
;  ... .

The number of inferences should go up from one answer to the next by a factor of N. And for comparison, this is Trealla:

?- length(L,N), time(countall(setof(t,permutation(L,L),[t]),CntS)).
% Time elapsed 0.000s, 57 Inferences, 1.727 MLips
   L = [], N = 0, CntS = 1
; % Time elapsed 0.000s, 64 Inferences, 1.306 MLips
   L = [_A], N = 1, CntS = 1
; % Time elapsed 0.000s, 98 Inferences, 3.630 MLips
   L = [_A,_B], N = 2, CntS = 2
; % Time elapsed 0.000s, 208 Inferences, 5.333 MLips
   L = [_A,_B,_C], N = 3, CntS = 5
; % Time elapsed 0.000s, 645 Inferences, 5.864 MLips
   L = [_A,_B,_C,_D], N = 4, CntS = 15
; % Time elapsed 0.001s, 2749 Inferences, 4.574 MLips
   L = [_A,_B,_C,_D,_E], N = 5, CntS = 52
; % Time elapsed 0.003s, 14849 Inferences, 5.183 MLips
   L = [_A,_B,_C,_D,_E,_F], N = 6, CntS = 203
; % Time elapsed 0.026s, 96741 Inferences, 3.702 MLips
   L = [_A,_B,_C,_D,_E,_F,_G], N = 7, CntS = 877
; % Time elapsed 0.271s, 738325 Inferences, 2.728 MLips
   L = [_A,_B,_C,_D,_E,_F,_G,_H], N = 8, CntS = 4140
; % Time elapsed 3.088s, 6459205 Inferences, 2.092 MLips
   L = [_A,_B,_C,_D,_E,_F,_G,_H,_I], N = 9, CntS = 21147
;  ... .

Probably due to #3176

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions