:- use_module(library(apply_macros)). :- use_module(prolog/cache_rocks). :- initialization cache_open('.cache'). numlist(N) :- forall(between(1, N, _), cached(numlist(1, 10, _))). my_numlist(N) :- forall(between(1, N, _), cached(my_numlist(1, 10, _))). my_numlist(L, U, Ns) :- must_be(integer, L), must_be(integer, U), L =< U, my_numlist_(L, U, Ns). my_numlist_(U, U, List) :- !, List = [U]. my_numlist_(L, U, [L|Ns]) :- L2 is L+1, my_numlist_(L2, U, Ns). native_numlist(N) :- forall(between(1, N, _), my_numlist(1, 10, _)). p(1, a). p(2, b). p(3, c).