Threaded queries? Rulebase independence?

Because predicates, modules and functors (name/arity pairs) are not garbage collected. Eventually that bites Logtalk as well:

r :-
    gensym(n, Name),
    gensym(a, Pred),
    C =.. [Pred,X],
    findall(C, between(1,3,X), Cs),
    create_object(Name, [], [public(Pred/1)], Cs),
    findall(X, Name::C, Ns),
    assertion(Ns == [1,2,3]),
    abolish_object(Name).

Now run this and watch the process using OS tools to see it grow forever.

 ?- forall(between(1, 1000000, _), r).
2 Likes