I don't think that dataflow works quite right in my case because, if I understood Mr. Straszheim's posts correctly then dataflows can't have cycles and I have cycles all over the place. Unfortunately this isn't visible in the example I gave because I used Sell which doesn't have cycles. Rent on the other hand is recursive and cyclic.
On Mar 1, 7:31 am, Richard Newman <holyg...@gmail.com> wrote: > >> but complexity of such expressions quickly grows as dependencies > >> between variables become more complex. Is there any > >> technique/framework for handling such calculations automatically? I > >> have a vague impression that this is what logic programming languages > >> are about. How would one implement such calculations in Clojure? > > As Johnny mentioned: this is a solver. Doing it in Clojure means > writing something rather more complicated than a simple calculator! > Clojure is not a logic programming language. > > You might find a cell/dataflow framework useful, which essentially > gives you spreadsheet-like dataflow: > > <http://richhickey.github.com/clojure-contrib/dataflow-api.html> > > best introduced in its original Common Lisp form: > > <http://smuglispweeny.blogspot.com/2008/02/cells-manifesto.html> > > but you'll still have to do some manual decision-making. (Just like in > a spreadsheet, you have to write the formulae...) > > You might also (depending on how things fall out) find some kind of > table-based or multimethod-based approach to be adequate (e.g., making > two different kinds of `sell` evaluation based on whether some value > is nil). That will reduce the number of explicit branches in your code. > > If neither of those helps, then your best bet is to spend a little > time with, say, Mathematica, Excel, and Prolog (or one of its > successors). Those might well be better systems for handling this kind > of web of dependencies. > > If you want a Lisp syntax for Prolog, try Allegro Common Lisp. > > http://www.franz.com/products/prolog/index.lhtml -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en