Once my average catches up with the daily weigh-in, I'll be Officially At My (Original) Goal. I think I'm going to aim at another 10 lbs, though.
I realized yesterday that it's not just hard but actually logically impossible to represent a mechanical object physically as a strict tree. Consider even just a triangle of beams. Two of them attach, making them children of the same parent (the joint). The third attaches to both, which is illegal.
A commenter suggested the netlist approach that electronic simulators take. The problem is that the netlist is a genome of the device. I have to be able to take a subset of the genome and swap it out for another piece that also has to drop in place. How does that work without leaving dangling "wires"? I could just leave them there for Nature to work out, but is that going to make success too infrequent for me to have patience for?
I think my algorithmic approach could work. But I haven't really worked it out. In any case, Haskell (or possibly better yet, Tcl or Lisp) is probably a good match. These languages already allow you to run data as code and treat code like data easily. Actually, now that I think about it, I'm not sure Haskell does that. What is that property even called?