Dear Ashis,
The "name" of a variable does not really exists at runtime. But what you
can do is build a record M indexed by file names (converted to atoms), such
that, for instance, M.'foo.ozf' gives the module corresponding to the file
named 'foo.ozf'.
%% returns a record with the modules located in the given directory
fun {GetModules DirName}
Mods = {ImportFiles DirName}
fun {GetName File}
{String.toAtom {FirstN {LastRemain File DirName} 4}}
end
fun {GetModule File}
[M] = {Module.link [File]} in M
end
NMs = {Map Mods fun {$ File} {GetName File}#{GetModule File} end}
in
{List.toRecord module NMs}
end
The list NMs is a list of pairs, the first element being the file name (as
an atom), the second one being the corresponding module. The function
List.toRecord makes a record mapping the filenames in the list to their
corresponding module. Look closely at how I use Map and the other functions
to build that record. You'll see, it is not so difficult.
Cheers,
raph
On Tue, Oct 21, 2008 at 7:52 PM, Maity, Ashis K <[EMAIL PROTECTED]>wrote:
> Raph,
>
>
>
> Thanks so much again. Actually, the following one I did kind of realize
> that I am reassigning the logic variable and hence not working. But how can
> I make that variable dynamic so that takes the name of the Functor file?
> However, I can live with that and not have the line that I highlight in
> italics.
>
>
>
> {ForAll Mods
>
> proc{$ File}
>
> *ConstraintFileName = {FirstN {LastRemain File DirName} 4}*
>
> {Browse 'do nothing'#{String.toAtom ConstraintFileName}}
>
> [ConstraintFileName] = {Module.link [File]}
>
>
>
>
>
> But how can I call a function from that module where the function name came
> from Pdc below (second part of my question)?
>
>
>
> {ForAll ProblemDescription.problemDomainConstraints
>
> proc{$ Pdc} Constr SpecificConstraints in
>
> if{HasFeature Pdc name} then
>
> %Constr = {Append "ConstraintFileName."
> Pdc.name}
>
> Constr = {VirtualString.toString
> "ConstraintFileName."#Pdc.name}
>
> {Browse Constr} ß- I build the Constr okay
>
> SpecificConstraints = {Constr
> ProblemDescription}
>
>
>
> hangs at the last line though works when I hard-code the Module and
> function name e.g, {ConstraintFileName.testFunc ProblemDescription}
>
>
>
> Ashis
> ------------------------------
>
> *From:* [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] *On
> Behalf Of *Raphael Collet
> *Sent:* Tuesday, October 21, 2008 1:25 PM
> *To:* Mozart users
> *Subject:* Re: "import" ing ozf dynamically
>
>
>
> Dear Ashis,
>
>
> About Module.load: you're right, I made a mistake, it's Module.link that
> you should use. Read carefully its documentation, you will understand why
> nothing happens when you call that function: it loads modules *on demand*.
> So
>
> Mods = {Module.link {ImportFiles DirName}}
>
> binds Mods to a list of variables, but does not load modules yet. You can
> check that by running {Browse Mods}. The variables in Mods will be
> determined (and the corresponding modules loaded) once the program will need
> their value. A simple way to force the loading is to Wait on all variables:
>
> {ForAll Mods Wait}
>
> Now, there are several mistakes in your code...
>
> local Mods in
>
> Mods = {ImportFiles DirName}
>
> {ForAll Mods
>
> proc{$ File}
>
> ConstraintFileName = {FirstN {LastRemain File DirName} 4}
>
> {Browse 'do nothing'#{String.toAtom ConstraintFileName}}
>
> [ConstraintFileName] = {Module.link [File]} ß------------ Program
> appears to hang here / however works okay if I remove the line above Browse
>
> end
>
> }
>
> End
>
> The program must fail after browsing the first filename.
> ConstraintFileName is declared as a *global* variable, and you bind it twice
> in the loop! You cannot reassign logic variables; here you are trying to
> assign it 2N values, where N is the number of files you load. The first
> assignment (the result of FirstN) succeeds, but the second one (the result
> of Module.link) fails, because it loads the module, and tries to assign it
> to ConstraintFileName. At that point, the program should stop.
>
>
> Cheers,
> raph
>
>
> _________________________________________________________________________________
> mozart-users mailing list
> [email protected]
> http://www.mozart-oz.org/mailman/listinfo/mozart-users
>
_________________________________________________________________________________
mozart-users mailing list
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users