Re: Re: Mathematica scoping / contexts / variable localization
- To: mathgroup at smc.vnet.net
- Subject: [mg105133] Re: [mg105110] Re: Mathematica scoping / contexts / variable localization
- From: "David Park" <djmpark at comcast.net>
- Date: Sun, 22 Nov 2009 06:08:03 -0500 (EST)
- References: <32142906.1258547432910.JavaMail.root@n11> <he36g8$efk$1@smc.vnet.net> <30783619.1258795562155.JavaMail.root@n11>
Hi Nasser, Yes rules are a good way to introduce data without setting values to symbols. This might especially be the case if you are working a problem with units. You might have something like: (Problem1Data = {x0 -> 3.25 Meter, v0 -> 5.2 Meter/Second})//Column then perform symbolic calculations, perhaps using Solve or DSolve, with equations that contain x0 and v0 and then substitute the data into the result at the end of the symbolic calculation. Notice that units should be part of the data and not part of the equations. result /. Problem1Data As far a debugging and code development are concerned, I believe most difficulty occurs by combining too much at once without looking at the subparts. For me, most routines start out as separate steps in a notebook, sometimes in one cell and sometimes in separate cells evaluated on a typical case. I want to see the output and don't use ";" until I'm pretty satisfied I know what I'm getting. After that, most errors come from failure to consider special cases. Only when I've calculated some cases do I try to write a formal definition and start moving the steps to a Module. There I may only add one step at a time and repeatedly evaluate to see that any generalizations are working. I may add Print statements to display intermediate values until I am finished or I may add them if a problem arises. Sometimes I might set a global temp variable to some intermediate result, retrieve it from an evaluation, and do some code development using it as starting data. Mathematica allows one to do all this simple stuff within a single notebook so why not take advantage of it? Mathematica is really ideal for this kind of development. Anyway for me it has worked pretty well and I've never felt the need to study how the various debuggers work. Then I might copy a routine to a notebook Routines section (which I call Package Purgatory) and add a usage statement, SyntaxInformation and other ancillary definitions. Then after using it for awhile and if it seems generally useful I may move it to Package Heaven. David Park djmpark at comcast.net http://home.comcast.net/~djmpark/ From: Nasser M. Abbasi [mailto:nma at 12000.org] hi David; "David Park" <djmpark at comcast.net> wrote in message news:he36g8$efk$1 at smc.vnet.net... > > Clear[a, b] > > ClearAll[f] > f[a_, b_][x_] := Exp[-a x] Sin[b x] > > Plot[f[.5, 3][x], {x, 0, 6}] > How about also using the above, but also use /. to assign values to parameters. Plot[f[a, b][x] /. {a -> .5, b -> 3}, {x, 0, 6}] You are right, I am finding that if one is very aware and disciplined during programming Mathematica then can side step many common problems, because in Mathematica it is more easy to fall into subtle problems for new users than in other programming languages. If one is slightly sleepy while programming in Mathematica, then many strange problem will show up later on. I also wish that Mathematica error handling can be improved in the sense that when some error shows up in some long running code, that at least it would tell me on which _line_ the error happened. not just some error message telling me that I can do this or that. It seems that, when this happens, I spend more time trying to figure where the error is coming from because the error message never tells me where this error is, even though it must have known. It does not even tell me which function it was in. If there was an easy to use debugger, I could run the code inside it, telling it to stop when an error or warning occurs, and this way I know exactly where the error was. But there is no such thing in Mathematica. (Please do not tell me to use this so called debugger in Mathematica 7, under Evaluation, I tried, and have no idea how it is supposed to work). I hope this error handling improves in next version of Mathematica, and please make the debugger like a _normal_ and standard debugger is supposed to be. May be what we also need is like what David had here, a set of articles that talks just about good programming styles for Mathematica, or good "patterns" to follow, targeted to users like most of us, who are not expert Mathematica programmers. I think this will be very useful. thanks, --Nasser