I really miss having something like a [`struct`][1] in Mathematica. I know of (and regularly use) a couple of programming techniques which feel like a `struct` (e.g., using [downvalues][2]), but are ultimately unsatisfactory (perhaps I'm using downvalues incorrectly). What programming approaches are available which provide similar functionality to a `struct`? Here's an abbreviated (and hopefully not too obtuse) example of how I use downvalues to emulate a struct. In this case, I'm distinguishing between TLC and TEC (these are sets of parameters for two different phases of a Moon mission, trans-lunar cruise and trans-earth cruise): deadBandWidth[X][TLC] ^= 10. \[Degree]; deadBandWidth[Y][TLC] ^= 10. \[Degree]; deadBandWidth[Z][TLC] ^= 20. \[Degree]; sunSearchAngle[Z][TLC] ^= 230. \[Degree]; sunSearchRate[Z][TLC] ^= 1. \[Degree]/Second; sunSearchAngle[X][TLC] ^= 75. \[Degree]; sunSearchRate[X][TLC] ^= 1. \[Degree]/Second; safingSpinRate[TLC] ^= (360. \[Degree])/Day; sunVector[TLC] ^= {-Cos[45. \[Degree]], 0., Sin[45. \[Degree]]}; safingSpinAxis[TLC] ^= sunVector[TLC]; deadBandWidth[X][TEC] ^= 20. \[Degree]; deadBandWidth[Y][TEC] ^= 20. \[Degree]; deadBandWidth[Z][TEC] ^= 20. \[Degree]; sunSearchAngle[Z][TEC] ^= 230. \[Degree]; sunSearchRate[Z][TEC] ^= 1. \[Degree]/Second; sunSearchAngle[X][TEC] ^= 75. \[Degree]; sunSearchRate[X][TEC] ^= 1. \[Degree]/Second; safingSpinRate[TEC] ^= (360. \[Degree])/Hour; sunVector[TEC] ^= {0., 0., +1.}; safingSpinAxis[TEC] ^= sunVector[TEC]; ?TLC Global`TLC safingSpinAxis[TLC]^={-0.707107,0.,0.707107} safingSpinRate[TLC]^=6.28319/Day sunVector[TLC]^={-0.707107,0.,0.707107} deadBandWidth[X][TLC]^=0.174533 deadBandWidth[Y][TLC]^=0.174533 deadBandWidth[Z][TLC]^=0.349066 sunSearchAngle[X][TLC]^=1.309 sunSearchAngle[Z][TLC]^=4.01426 sunSearchRate[X][TLC]^=0.0174533/Second sunSearchRate[Z][TLC]^=0.0174533/Second [1]: http://en.wikipedia.org/wiki/Struct_%28C_programming_language%29 [2]: http://reference.wolfram.com/mathematica/ref/DownValues.html