Daniel@0: :- module(code_cache, Daniel@0: [ clean_code_cache/1 Daniel@0: , cache_code/3 Daniel@0: , cache_code/2 Daniel@0: , call_cached/2 Daniel@0: ]). Daniel@0: Daniel@0: :- use_module(library(insist)). Daniel@0: Daniel@0: :- meta_predicate cache_code(0,-). Daniel@0: :- meta_predicate cache_code(+,0,-). Daniel@0: Daniel@0: Daniel@0: cache_code(Code,Code1) :- cache_code(false,Code,Code1). Daniel@0: cache_code(MultiUse,Code,code_cache:call_cached(ID,MultiUse)) :- Daniel@0: uuid(ID), Daniel@0: get_time(T), Daniel@0: recorda(ID,code_cache(T,Code)). Daniel@0: Daniel@0: call_cached(ID,Keep) :- Daniel@0: insist(recorded(ID,code_cache(_,Code),Ref),code_not_in_cache(ID)), Daniel@0: (Keep=false -> erase(Ref); true), Daniel@0: call(Code). Daniel@0: Daniel@0: clean_code_cache(MaxAge) :- Daniel@0: get_time(Now), Daniel@0: Oldest is Now-MaxAge, Daniel@0: forall( ( recorded(_,code_cache(T,Code),Ref), T