<div class="notebook"> <div class="nb-cell program" name="p1"> :- dynamic frame/2. g(N) :- forall(between(1, N, I), gen(I)). gen(I) :- random_between(1, 12, S1), random_between(1, 10 000, V1), random_between(20, 32, S2), random_between(1, 10 000, V2), random_between(4, 52, S3), random_between(1, 10 000, V3), assertz(frame(I, [S1-V1, S2-V2, S3-V3])). get_frame(ID, S-V) :- frame(ID, Slots), member(S-V, Slots). q :- forall(between(1, 52, Slot), forall(get_frame(_, Slot-_), true)). </div> <div class="nb-cell query" name="q1"> time(g(100 000)), time(q), time(q). </div> <div class="nb-cell program" name="p3"> :- dynamic frame/2. g(N) :- forall(between(1, N, I), gen(I)). gen(I) :- random_between(1, 12, S1), random_between(1, 10 000, V1), random_between(20, 32, S2), random_between(20 000, 30 000, V2), random_between(40, 52, S3), random_between(40 000, 50 000, V3), list_to_assoc([S1-V1, S2-V2, S3-V3], Slots), assertz(frame(I, Slots)). get_frame(ID, S-V) :- frame(ID, Slots), get_assoc(S, Slots, V). q :- forall(between(1, 52, Slot), forall(get_frame(_, Slot-_), true)). </div> <div class="nb-cell query" data-tabled="true" name="q3"> time(g(100 000)), time(q), time(q). </div> <div class="nb-cell program" name="p2"> :- dynamic frame/3. g(N) :- forall(between(1, N, I), gen(I)). gen(I) :- random_between(1, 12, Slot), random_between(1, 10 000, Value), assertz(frame(I, Slot, Value)). q :- forall(between(1, 12, Slot), forall(frame(_, Slot,_), true)). </div> <div class="nb-cell query" name="q2"> time(g(100 000)), time(q), time(q). </div> </div>