Thanks for the help, that solution works out fine. However it raises another questions: I need to store those dynamic predicates in different files (want to use some with different modules and avoid copy&paste). Furthermore I want to load that definitions only with a single import/use_module call. When I load these predicates with :- ['outsourced_predicates'] the solution below does not detect the predicates defined in "outsourced_predicates" (they seem to be unfindable for "clause"). I hacked that by defining a module "outsourced_predicates", which has a tool predicate "assert_preds", that asserts everything to the calling module: :- export assert_preds/0. :- tool(assert_preds/0, assert_preds/1). assert_preds(M) :- call(assert(..))_at_M. That works, but I have to call the predicate "assert_preds" explicitly. I would rather like to call it implicitly at import time. Therefore I tried :- export initialization((outsourced_predicates : assert_preds)) However, then "clause" does not detect the asserted predicates. Do you have any idea how I could use definitions from different files such that "clause" can find all of them in one module and that only one import command is needed? Thanks, again! Gesche On 2014-05-29 13:20, Joachim Schimpf wrote: > On 29/05/2014 11:48, Marco Gavanelli wrote: >> Dear Gesche, >> >> Maybe you could use abolish/1 to remove the dynamic predicate and then >> use compile_term/1 to re-add the predicate in compiled form. >> >> Example: >> ------------------------------------------------------------------ >> [eclipse 1]: assert(p:-q). >> >> Yes (0.00s cpu) >> [eclipse 2]: compile_term(q). >> source_processor.eco loaded in 0.00 seconds >> ... >> ecl_compiler.eco loaded in 0.05 seconds >> >> Yes (0.05s cpu) >> [eclipse 3]: clause(p,X). >> >> X = q >> Yes (0.00s cpu) >> [eclipse 4]: abolish(p/0). >> >> Yes (0.00s cpu) >> [eclipse 5]: p. >> calling an undefined procedure p in module eclipse >> Abort >> [eclipse 6]: compile_term(p:-q). >> >> Yes (0.00s cpu) >> [eclipse 7]: clause(p,X). >> procedure not dynamic in clause(p, X) in module eclipse >> Abort >> [eclipse 8]: p. >> >> Yes (0.00s cpu) >> --------------------------------------------------------------------- > > > Correct. Here is a little utility that does everything: > > :- tool(dynamic_to_static/1, dynamic_to_static_/2). > dynamic_to_static_(F/N, Module) :- > functor(Head, F, N), > findall(Head:-Body, clause(Head, Body), Clauses)_at_Module, > abolish(F/N)_at_Module, > compile_term(Clauses)_at_Module. > > > ?- assert(p(111)), assert(p(222)). > Yes (0.00s cpu) > > ?- dynamic_to_static(p/1). > Yes (0.00s cpu) > > ?- is_dynamic(p/1). > No (0.00s cpu) > > ?- p(X). > X = 111 > Yes (0.00s cpu, solution 1, maybe more) > X = 222 > Yes (0.02s cpu, solution 2) > > > -- Joachim > > > ------------------------------------------------------------------------------ > Time is money. Stop wasting it! Get your web API in 5 minutes. > www.restlet.com/download > http://p.sf.net/sfu/restlet > _______________________________________________ > ECLiPSe-CLP-Users mailing list > ECLiPSe-CLP-Users_at_lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/eclipse-clp-users >Received on Wed Jun 11 2014 - 18:50:22 CEST
This archive was generated by hypermail 2.3.0 : Wed Sep 25 2024 - 15:13:21 CEST