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