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

Spend less time searching and more time finding.
http://www.wz.com/internet/Mathematica.html

```

• Prev by Date: Re: Intersection Ellipse & Circle
• Next by Date: Oscillatory Integrand
• Previous by thread: Dependance Graphs
• Next by thread: Front end: Window properties