Dear Torsten,
2009/3/25 Torsten Anders <[email protected]>
> Dear Raphael,
>
> Thank you for your explanation! I now understand (hopefully) what the
> problem is in principle. Nevertheless, I am stiff too dense to get my dummy
> example running after your explanation. Should I import ressources within
> the functor for the script or even within the script itself?
>
You should import it in the functor. The script should not access some
global state (like Module).
Nevertheless, even if I define my class in a functor and then link/apply
> this functor only within the script I get the error below, so the class is
> seemingly still some unusable resources. What am I missing? Also, why do I
> get the warning "Unable to reach the net, using localhost instead" -- this
> machine certainly has network access.
>
I suspect the unusable resource is in Module itself! Module is not part of
the language definition, and you should import it as well :-)
Here is how you should modify your example:
declare
> %% dummy functor with class
> functor MyDataF
> import
> FD
> export
> MyClass
> define
> class MyClass
> attr val
> meth init(val:?Val<={FD.decl})
> @val = Val
> end
> meth val($) @val end
> end
> end
> Machines = init(localhost:2)
> functor ScriptF
> import
> %% Any ressources except from the Oz base environment must be treated
> explicitly for distribution: import any functor needed (FD, MyData) within
> the functor/script
> FD
>
Module % Module is a resource, and we need it to apply
MyDataF
> export Script
> define
>
%% get module MyData from functor MyDataF (the functor itself is
resource-free, so we can access it)
[MyData] = {Module.apply [MyDataF]}
%% dummy script
> proc {Script Root}
>
> X = {New MyData.myClass init}
> Y = {New MyData.myClass init}
> Z = {New MyData.myClass init(val: 7)}
> in
> Root = unit(X Y Z)
> %% Avoid constraint equation syntax in distributed programs
> {FD.sum [{X val($)} {Y val($)}] '=:' {Z val($)}}
> {FD.less {X val($)} {Y val($)}}
> %%
> {FD.distribute ff [{X val($)} {Y val($)}]}
> end
> end
> %% create search engine for two processes on localhost
> SearchEngine = {New Search.parallel Machines}
> Solution = {SearchEngine one(ScriptF $)}
>
Here you are, you were pretty close. I think it should work, now.
Cheers,
raph
_________________________________________________________________________________
mozart-users mailing list
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users