/* dynamic_unit_clause benchmark in Picat v3. From SICStus Prolog benchmark https://sicstus.sics.se/performance.html This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ main => go. go ?=> data(Data), dynamic_unit_clause(Data, Out), println(Out), nl. go => true. top :- data(Data), dynamic_unit_clause(Data, _Out). benchmark(Data, Out) :- dynamic_unit_clause(Data, Out). data(Data) :- init_dynamic_clause(Data). init_dynamic_clause1([]). init_dynamic_clause1([Key|Keys]) :- Value is (Key+42) mod 31, % some arbitrary value. %% writeq(assertz(dynamic_clause(Key, 'Foo', Value))), nl, bp.assertz($dynamic_clause(Key, 'Foo', Value)), init_dynamic_clause1(Keys). init_dynamic_clause(Data) :- Seq=[14,89,37,43,33,41,95,98,32,36, 86,72,97,18,29,23,40,39,61,80, 26,99,15,51,45,1,17,52,46,57, 70,81,34,35,87,92,49,21,96,8, 56,3,100,9,4,63,11,50,67,42, 75,90,38,22,79,24,73,48,10,82, 88,6,5,20,93,62,13,60,69,64, 31,47,83,27,84,58,19,77,71,30, 85,66,44,65,25,76,12,94,28,54, 53,68,2,91,7,55,16,78,59,74], bp.retractall($dynamic_clause(_,_,_)), init_dynamic_clause1(Seq), Data=[97,74,13,28,39,64,16,34,87,88, 78,96,100,23,21,26,60,87,43,81,17,34,43,48,12,31,35,76,38,31,70,30,13,86,50,38,77,31,57,48, 80,9,11,2,32,74,28,83,32,19,60,79,20,36,92,85,62,66,34,29,24,12,27,12,58,47,91,39,87,72, 58,91,38,56,17,92,94,34,69,84,76,14,11,5,41,57,19,95,42,77,51,32,15,13,82,32,54,12,56,20, 53,4,46,57,2,61,32,98,43,42,83,34,91,43,58,69,74,53,72,23,56,64,63,14,9,77,98,67,70,94, 71,45,87,4,79,95,23,30,56,43,19,17,11,45,10,70,77,41,25,43,28,70,10,100,79,55,44,45,73,84, 88,3,94,28,58,1,11,36,5,56,49,38,65,29,49,65,96,24,97,30,82,64,81,32,79,4,57,11,97,7, 83,26,84,85,48,50,42,58,54,31,35,69,49,5,7,54,33,39,1,68,38,94,33,26,14,99,99,66,92,56, 92,37,93,100,82,65,52,1,15,10,68,63,59,73,2,19,81,79,38,9,18,48,26,64,41,34,78,93,30,96, 70,60,36,83,88,98,95,68,88,66,87,84,1,96,88,49,22,5,93,13,32,39,46,14,40,94,28,64,15,58, 44,5,99,56,60,33,59,14,83,17,7,13,58,85,32,40,87,16,14,8,13,62,62,13,64,97,32,49,25,50, 59,77,84,24,56,4,87,50,43,65,22,73,11,78,69,78,62,1,82,72,69,13,66,22,96,100,18,35,12,27, 52,17,55,55,36,45,91,32,93,47,47,96,95,71,22,1,33,37,27,60,55,81,57,29,56,78,69,53,60,72, 83,59,22,18,55,39,71,55,70,6,56,60,43,45,62,94,84,61,5,18,80,68,13,36,46,33,84,80,25,37, 18,79,31,82,28,17,53,82,60,76,50,42,35,74,75,71,2,71,41,10,43,40,34,40,84,20,4,60,81,31, 3,11,79,22,54,72,19,11,64,28,6,20,98,7,44,69,59,73,92,84,19,42,11,31,86,32,33,98,40,10, 8,29,7,80,88,31,56,93,46,14,40,48,94,59,59,38,72,49,73,19,14,99,51,84,50,89,5,20,10,21, 52,59,3,82,8,32,13,19,46,100,64,23,75,33,45,10,77,49,89,11,36,57,84,89,11,43,6,6,3,27, 75,8,31,87,11,61,78,42,36,70,32,31,100,71,67,19,77,77,85,41,94,19,35,13,81,89,28,72,10,6, 82,98,95,98,61,90,38,11,27,72,33,21,66,56,33,33,35,83,88,30,46,98,66,40,39,64,52,22,95,96, 19,44,3,48,2,9,94,22,70,91,1,36,35,84,16,19,62,68,92,100,94,52,24,38,61,35,53,92,88,8, 85,33,43,13,20,16,97,65,84,15,50,28,47,86,33,8,45,64,97,49,5,20,2,61,44,71,73,47,7,58, 76,91,78,86,55,21,64,78,43,84,42,15,36,53,42,4,58,50,22,89,72,42,25,90,93,93,66,1,69,62, 50,53,8,18,33,9,17,2,92,81,91,28,25,55,37,42,92,55,35,68,30,56,95,32,70,80,78,81,50,43, 6,92,60,62,85,7,91,7,7,49,99,45,80,19,15,5,91,59,70,44,76,48,92,98,60,87,87,81,75,19, 9,46,83,53,90,15,93,68,12,10,68,56,88,25,47,52,19,47,56,33,35,59,47,53,36,40,81,38,25,50, 44,27,56,71,65,32,21,14,51,43,35,95,53,42,16,10,61,7,99,40,29,87,41,12,63,67,33,87,50,11, 84,35,94,64,82,66,66,27,51,56,62,12,80,36,98,14,46,98,11,48,89,64,9,72,35,90,83,80,84,35, 87,97,10,41,64,34,20,95,87,44,7,78,77,94,68,77,17,15,58,29,88,33,17,72,67,88,88,5,94,36, 32,38,46,42,26,56,46,73,70,83,56,93,26,98,86,43,52,9,55,81,11,24,21,91,27,82,1,73,52,74, 100,68,22,87,14,100,56,25,67,76,81,17,68,90,98,68,53,30,64,39,13,61,40,94,75,87,24,36,24,61, 45,57,21,75,16,80,69,83,32,25,50,13,72,89,30,85,42,10,73,12,22,13,79,75,42,84,10,42,13,98, 60,9,57,100,72,42,43,88,88,85,41,63,96,12,65,46,76,76,72,56,5,69,66,85,12,60,62,68,100,83, 57,96,31,94,73,51,37,61,53,76,73,53,18,35,36,52,22,78,3,92,26,64,89,42,85,57,14,46,23,21], true. dynamic_unit_clause([], []). dynamic_unit_clause([X|Xs], [Y|Ys]) :- bp.dynamic_clause(X, 'Foo', Y), dynamic_unit_clause(Xs, Ys).