After I heard about the Wolfram Alpha integration, I decided to give it a shot. I didn't like the price tag.
At the time I was interested in chemical simulations, and I didn't know of anything else that'd let me do them out of the box (without requiring me to already have a much greater command of chemistry than I do presently.) I was on an A-Life kick. Was wondering if I might be able to find some kind simplified "artificial chemistry" that'd let me get an evolutionary process going at a (pseudo-) chemical level without leaving me starved for computing resources. I really dug the way Alpha would in some cases be able to supply me with m-expression representations of things. Kind of wish they'd just used Lisp for Mathematica, and gridding it up isn't cheap, so I ended up doing some weird art with it before abandoning it in favor of Squeak, which I can parallelize at the process level without trouble, and of course the green threads work well enough for some things too. I did really like the touch of HyperCard that was going on with it though. All in all, I haven't used it enough to justify the expense, and it takes too much space on the disk:( On Jul 28, 2011, at 12:14 PM, David Leibs <david.le...@oracle.com> wrote: > Ah, powerful notations and the Principia. These are some of my favorite > things. :-) > > An excellent example of a difficult subject made easier by a wonderful tool > is Mathematica. I think the Wolfram folks have done a really great job over > the last 25 years with Mathematica. You can directly use math notation but > it is converted into the much more powerful internal representation of > Mathematica terms. Just think of Mathematica terms as s-expressions and you > are close. Mathematica's math notation system is built on a general system > that supports notations so that you could build a notation system that is > what chemists would want. > > The Mathematica Notebook is a wonderful system for exploration. Notebooks > let you build beautiful publishable documents that typically also contain > live code for simulations and modeling. Of course a Mathematica notebook is > just a bunch of Mathematica terms. I wish web browsers were as good as > Mathematica notebooks. They are like Smalltalk workspaces on steroids. I > wish there was an open source Mathematica notebook like > "read-canonicalize-evaluate-present" shell. > > At the bottom of Mathematica is the Mathematica language which is a very > "Lispy" functional language with a gigantic library of primitives. There is > no Type Religion in Mathematica's functional programming. The documentation > is extensive and made from Mathematica notebooks so that all examples are > both beautiful and executable. The learning curve is very very high because > there is so much there but you can start simply just by evaluating 3+4 and > grow. It's very open ended. > > The Mathematica language is also great for meta programming. Last year my > son was working for the University of Colorado physics department building a > model of the interaction of the solar wind with the interstellar medium. His > code made big use of meta programming to dramatically boost the performance. > He would partially evaluate his "code/ math" in the context of interesting > boundary conditions then use Simplify to reduce the code then run it through > the low level Mathematica compiler. He was able to get a 100x performance > boost this way. Mathematica was his first programming language and he has > used it regularly for about 14 years . > > > To give you a taste let's implement the most beautiful Newton's forward > difference algorithm from the Principia. > > see: > http://mathworld.wolfram.com/FiniteDifference.html > > for the background. > The code below (hopefully not too mangled by blind email systems) repeatedly > takes differences > until a zero is found resulting in a list of list of all differences. The > first elements are then harvested and the last zero dropped. > Now just make some parallel lists for that will get passed to the difference > term algorithm. I could have written a loop > but APL and Mathematica has taught me that Transpose and Apply, and a level > spec can write my loops for me without error. > Once you have all the terms in a list just join them with Plus. Finally run > the whole thing through Simplify. > > The differenceTerm and fallingFactorial helper functions should look familiar > to those who have played with modern functional programming. Note I pass in > a symbol and the Mathematica rule reducing system naturally does partial > evaluation. I realize I have left a lot of Mathematica details unexplained > but I am just trying to give a taste. > > Using the data from the mathworld web page you we can evaluate away > > praiseNewton[{1, 19, 143, 607, 1789, 4211, 8539}, n] > > 1+7 n+2 n^2+3 n^3+6 n^4 > > Without the Simplify we would have gotten: > > 1+18 n+53 (-1+n) n+39 (-2+n) (-1+n) n+6 (-3+n) (-2+n) (-1+n) n > > I would never be able to do the Algebra right. :-) > > if I want to define a function I can let my polynomial defining function do > my work. > > fn[n_] = praiseNewton[{1, 19, 143, 607, 1789, 4211, 8539}, n] > > > -------- > SetAttributes[praiseNewton, HoldRest]; > praiseNewton[list_, sym_] := Module[{coefs, indexes, syms}, > coefs = > Drop[Map[First, NestWhileList[Differences, list, First[#] > 0 &]], -1]; > indexes = Range[0 , Length[coefs] - 1]; > syms = ConstantArray[sym, Length[indexes]]; > Simplify[ > Apply[Plus, Apply[differenceTerm, Transpose[{coefs, indexes, syms}], 1]]]]; > > differenceTerm[coef_, count_, sym_] := 1/count! * coef * > fallingFactorial[count, 0, sym]; > fallingFactorial[0, indx_, sym_] := 1; > fallingFactorial[1, indx_, sym_] := (sym - indx); > fallingFactorial[count_, indx_, sym_] := (sym - indx) * > fallingFactorial[count - 1, indx + 1, sym]; > > -------- > > What is much more interesting than the above code is the sequence of > evaluations that lead to it. > > It started with: > > FixedPointList[Differences, {1, 19, 143, 607, 1789, 4211, 8539}] > > {{1, 19, 143, 607, 1789, 4211, 8539}, {18, 124, 464, 1182, 2422, 4328}, {106, > 340, 718, 1240, 1906}, {234, 378, 522, 666}, {144, 144, 144}, {0, 0}, {0}, > {}, {}} > > and just grew and grew by exploration, one experiment at a time.. :-) > > I am sorry to have been so uncharacteristically wordy. > > -David Leibs > > On Jul 28, 2011, at 9:57 AM, Alan Kay wrote: > >> Well, we don't absolutely *need* music notation, but it really helps many >> things. We don't *need* the various notations of mathematics (check out >> Newton's use of English for complex mathematical relationships in the >> Principia), but it really helps things. >> >> I do think the hard problem is "design" and all that goes along with it (and >> this is true in music and math too). But that is not the end of it, nor is >> ignoring the design of visual representations that help grokking and >> thinking a good idea. >> >> I think you are confusing/convolving the fact of being able to do something >> with the ease of it. This confusion is rampant in computer science .... >> >> Cheers, >> >> Alan >> > > _______________________________________________ > fonc mailing list > fonc@vpri.org > http://vpri.org/mailman/listinfo/fonc
_______________________________________________ fonc mailing list fonc@vpri.org http://vpri.org/mailman/listinfo/fonc