Re: Dependance Graphs
- To: mathgroup at smc.vnet.net
- Subject: [mg32517] Re: [mg32333] Dependance Graphs
- From: Omega Consulting <omega_consulting at yahoo.com>
- Date: Fri, 25 Jan 2002 02:57:46 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
At 01:30 AM 1/15/2002, Oleg Burd wrote:
>G'day mathgroup,
>I have some general questions on Implementation of dependencies and
>properties in Mathematica.
>
>I want to replicate a structure with certain properties. For example Product
>"Building", has Property "Stock", Stock = {FirstStock, SecondStock,
>ThirdStock }
>Stock has Flat = {RightFlat, LeftFlat},
>Flat has Properties = {Owner, Price, Area}.
>
>The way I found to work with such constructions in Mathematica is ^=:
>Area[RightFlat[FirstStock[Home_Building]]]=100;
>Owner[LeftFlat[SecondStock[Home_Building]]]="Robert";
>Price[RightFlat[FirstStock[Home_Building]]]=50000;
>
>My Questions are:
>Is there any other smarter ways to build such dependencies up?
>How can I automatically from Properties Lists {FirstStock, SecondStock,
>ThirdStock }, {RightFlat, LeftFlat}, {Owner, Price, Area} and
>DependanceList = {Stock, Flat, Properties}
>(the list which shows which property refers to which one) generate all
>objects of type:
>Property[Flat[Stock[Building]]] ?
>And finally how can one visualize it?
>
>Any help or comments will be appreciated.
>
>Thanks
>Oleg.
It depends on what you want to do. Do all these properties exist for each
building? If so, I would try creating a datatype and interface functions
for working with that datatype. It's a little bit like OOP. First define
how the data is organized in the datatype. Usually, this is done by
position. For example,
Building[Stock[Flat[owner, price, area], Flat[owner, price, area]], ..]
The Building function holds 3 Stocks. The Stock function holds 2 Flats. The
Flat function holds 3 values.
Now you create a function to create a default building with no settings.
CreateBuilding[] :=
Module[{flat, stock},
flat = Flat[None,None,None];
stock=Stock[flat,flat];
Building[stock,stock,stock]
]
HomeBuilding=CreateBuilding[];
If you don't like those defaults, you can add arguments or options to
control the defaults.
Then, you need some commands for setting and getting the values.
Attributes[SetProperty]={HoldFirst}
SetProperty[bldg_, {stock_, flat_, prop_}, val_] :=
Module[{f,s,p},
s=stock/.{"FirstStock"->1, "SecondStock"->2, "ThirdStock"->3} ;
f=flat/.{"LeftFlat"->1, "RightFlat"->2} ;
p=prop/.{"Owner"->1, "Price"->2, "Area"->3};
bldg[[s,f,p]] = val;
]
GetProperty[bldg_, {stock_, flat_, prop_}] :=
Module[{f,s,p},
s=stock/.{"FirstStock"->1, "SecondStock"->2, "ThirdStock"->3} ;
f=flat/.{"LeftFlat"->1, "RightFlat"->2} ;
p=prop/.{"Owner"->1, "Price"->2, "Area"->3};
bldg[[s,f,p]]
]
Now lets take it for a spin.
SetProperty[HomeBuilding, {"SecondStock","LeftFlat","Price"}, 1000]
This changes the definition of the object.
HomeBuilding
Building[Stock[Flat[None,None,None],Flat[None,None,None]],
Stock[Flat[None,1000,None],Flat[None,None,None]],
Stock[Flat[None,None,None],Flat[None,None,None]]]
And you can retrieve information without knowing the internal representation.
GetProperty[HomeBuilding, {"SecondStock","LeftFlat","Price"}]
1000
--------------------------------------------------------------
Omega Consulting
"The final answer to your Mathematica needs"
Spend less time searching and more time finding.
http://www.wz.com/internet/Mathematica.html