Siddharth Angrish wrote: > Hi > > I am trying to port a big prolog code (FSA6) to ECLiPse. The > code is compatible > with swi/sicstus/yap(SSY) prologs. I have a few queries regarding > predicate delarations: > > 1) SSY support the keyword, multifile. Does EClipSe use "dynamic" for > the purpose? Yes, the conmpatibility packages currently define multifile as dynamic. > > 2) Does "dynamic" also serve the purpose of the keyword > "discontiguous" which is there > in all SSY Well, Eclipse supports discontigous, but doesn't recognize the module: prefix. So you may be better off redefining it as dynamic for your purposes. Add the following to the compatibility package you are using: :- export discontiguous/1. :- export op(1150, fx, (discontiguous)). :- tools(discontiguous/1,discontiguous_/2). discontiguous_(Pred, Module) :- dynamic(Pred)@Module. and add discontiguous/1 to the existing directive :- export eclipse_language except ... to hide the original ECLiPSe definition. > > 3) SSY support the following declaration: > multifile user:help_info/4. > which I think says that-> To the predicate help_info/4, "defined" > in module "user", > new clauses can be added in the current file. > > I modified it to: (only in the first file) > dynamic user:help_info/4 > > However, this module does not exist anywhere in the code I > am porting. If you have loaded the quintus compatibility library (directly, or indirectly through sicstus or swi), then the user-module exists. > I suppose it is created on the fly in SSY, a feature which ECLIPSE > does NOT support. > > To circumvent the "non-availability" of this feature I created the user module > myself as following: > -----------user.ecl------------------ > :- module(user). > help_info(A,B,C,D). > ---------------------------- > Then in the module I am working on, I included the delcaration > :- lib(user). > > Upon compilation I am getting the error: ( I am using-> > lib(myLibraryName). to compile) > [[type error in dynamic user : help_info / 4 in module fsa_array]] Again, ECLiPSe's native dynamic directive does not recognise the module: prefix, but the definition in lib(quintus)/lib(sicstus) does. You haven't said which compatibility library you are using. If you use swi, then add in swi.ecl the line (dynamic)/1, to the reexport ... from quintus directive. Furthermore, ECLiPSe doesn't allow (for good reasons) program clauses to be module-prefixed. We can however add limited support (for dynamic clauses only) to the compatibility package as follows: % Support Quintus-style "qualified clauses" (for dynamic predicates only) :- export macro((:)/2, t_colon_clause/2, [clause]). t_colon_clause(QualClause, []) :- ( QualClause = (Module:Head:-Body) -> Clause = (Head:-Body), functor(Head, N, A) ; QualClause = (Module:Clause), functor(Clause, N, A) ), ( current_module(Module) -> true ; create_module(Module) ), export(N/A)@Module, assert(Clause)@Module. I will add this to lib(quintus). > > what can be the problem? > > 4) How can one see all the "loaded modules " in the current instance of eclipse Use current_module/1. > > 5) Is there any way/need of getting a "public declaration" for a > predicate in ECLIPSE This should more or less equivalent to export/1. If you use lib(quintus) or sicstus, it is already defined. lib(swi) is lacking a reexport directive for it (i'll fix that). -- JoachimReceived on Mon Apr 30 2007 - 17:08:09 CEST
This archive was generated by hypermail 2.2.0 : Thu Feb 02 2012 - 02:31:58 CET