MathGroup Archive 2011

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Mathematica daily WTF

  • To: mathgroup at smc.vnet.net
  • Subject: [mg115352] Re: Mathematica daily WTF
  • From: DrMajorBob <btreat1 at austin.rr.com>
  • Date: Sat, 8 Jan 2011 03:40:29 -0500 (EST)
  • References: <201101070911.EAA14093@smc.vnet.net>
  • Reply-to: drmajorbob at yahoo.com

I never use echo on anything but symbols, so the problem doesn't come up.

But you're right in general, of course.

Bobby

On Fri, 07 Jan 2011 04:51:12 -0600, Leonid Shifrin <lshifr at gmail.com>  
wrote:

> Bobby,
>
> the problem with this approach is that if <s> contains side effects  
> (think
> i++, for instance), then
> echo[] will introduce one additional evaluation of <s>, in addition to  
> the
> actual place where <s>
> is in code. This may break things. Ingolf's version is free from this
> problem, because he uses
> pure function which evaluates the argument just once at the
> parameter-passing stage. There was
> a discussion on a similar topic some while ago, where I posted a solution
> similar to both yours
> and Ingolf's (modulo debug mode), which is not ideal either but free from
> this problem:
>
> http://groups.google.com/group/comp.soft-sys.math.mathematica/browse_thread/thread/bfd67e9122b1fdec
>
> My function will fail in cases like the following:
>
> Clear[a];
> ShowIt[a] = 2
>
> (which are presumably pathological uses anyway), and generally when used  
> to
> display held arguments.
> There are workarounds for my version for such cases but they are more
> complex. The debug mode
> can be easily added to it as well.
>
> Regards,
> Leonid
>
>
>
> On Fri, Jan 7, 2011 at 12:11 PM, DrMajorBob <btreat1 at austin.rr.com>  
> wrote:
>
>> I'd try something like:
>>
>> Clear[echo]
>> Attributes[echo] = {HoldAll};
>> echo[s_, place_] /; debug :=
>>  Print[ToString[Unevaluated[s]], " = ", s, " at ", place]
>>
>> With a module like this:
>>
>> debug = True;
>> bookSave[num_]:=Module[{book,dir},
>>
>> (* some code *)
>> echo[dir, 1];
>> echo[book, 2];
>> echo[num, 3];
>>
>> (* other code *)
>>
>> ]
>>
>> The printed output was:
>>
>> dir$3287 = /Users/keleen/TS/Wings/ at 1
>>
>> book$3287 = Book1 at 2
>>
>> 1 = 1 at 3
>>
>> It's annoying that "num" prints as its value, rather than its name.
>>
>> Unevaluated is still a mystery.
>>
>> Bobby
>>
>> On Thu, 06 Jan 2011 01:01:37 -0600, Ingolf Dahl <ingolf.dahl at telia.com>
>> wrote:
>>
>> > Andrzej,
>> > Since you ask for "single examples", I would like to hear your opinion
>> > about
>> > my "Debugging code snippet"
>> >
>> > ((If[debug, Print["Place1 ", #]]; #) &)@
>> >
>> > I have started with the functional identity operator # &@, and then  
>> added
>> > the global variable debug, which if set to True prints out the value  
>> of
>> > the
>> > variable as side effect. The code snippet can be used to monitor the
>> > values
>> > of sub expressions during debugging, without disturbing the flow of  
>> the
>> > program, and it does not necessarily need to be removed afterwards.
>> > Best regards
>> >
>> > Ingolf Dahl
>> > ingolf.dahl at telia.com
>> >
>> > This code snippet can be inserted into d
>> >> -----Original Message-----
>> >> From: Andrzej Kozlowski [mailto:akoz at mimuw.edu.pl]
>> >> Sent: den 3 januari 2011 09:58
>> >> To: mathgroup at smc.vnet.net
>> >> Subject: [mg115174] Re: Mathematica daily WTF
>> >>
>> >> I don't want to get involved in what is likely to turn out a
>> >> "linguistic"
>> > dispute, but I think
>> >> your ideas about what constitutes "functional" and "procedural" are
>> > misconceived and do
>> >> not correspond to what other's mean by these terms. While there is  
>> some
>> > difference between
>> >> the meaning of "function" in mathematics and in programming, both
>> >> concepts
>> > originate from
>> >> the same source. To quote Thompson's "Haskel. The craft of functional
>> > programming": "A
>> >> function is something that we can picture as a box with some inputs  
>> and
>> >> an
>> > output:..."
>> >> followed by a picture which is exactly the same that I used to draw  
>> in
>> >> my
>> > lectures on
>> >> introductory set theory and analysis for many years before I heard of
>> > functional
>> >> programming. In this sense functions are ubiquitous in mathematics  
>> and
>> > science. "Procedural
>> >> programming", on the other hand, is programming by "change of state"  
>> or
>> > "side-effects", and
>> >> as the latter expression suggests, is less natural for the human mind
>> >> even
>> > if it could be
>> >> claimed to c!
>> >> orrespond more closely to what goes on at "machine level". In any  
>> case,
>> >> I
>> > cannot think of
>> >> any scientific or mathematical problems that can be more naturally
>> > formulated in terms of
>> >> "side-effects" than in terms of "functions". Perhaps they exist and  
>> I my
>> > bias is due to several
>> >> decades of doing mathematics but I seriously can't think of a single
>> > example. Can you
>> >> provide one?
>> >>
>> >> Andrzej Kozlowski
>> >>
>> >>
>> >> On 2 Jan 2011, at 10:55, AES wrote:
>> >>
>> >> > In article <ifmrvv$pim$1 at smc.vnet.net>,
>> >> > Andrzej Kozlowski <akoz at mimuw.edu.pl> wrote:
>> >> >
>> >> >>
>> >> >> anyway, it does not matter as far as the point I was making is
>> > concerned,
>> >> >> which is that the C-like structure of Mathematica procedural  
>> programs
>> > is
>> >> >> helpful to people (somewhat) familiar with C or Fortran.
>> >> >>
>> >> >
>> >> > I'd argue it is also extremely helpful to people who _think_
>> >> physically,
>> >> > or if you like procedurally, and who are primarily focused on  
>> solving
>> >> > problems that have an inherently procedural character.
>> >> >
>> >> > The successive steps (lines, cells, expressions) in a procedural
>> >> program
>> >> > will very often state or mimic or reproduce what happens as a  
>> function
>> >> > of time in a dynamic system, or as a function of distance as a wave
>> >> > propagates, or mimic the flow of control in a complex system, or .  
>> . .
>> >> >
>> >> > As such, they simplify the process of _coding_ these programs; they
>> >> > _document_ and make readable what the program is doing, step by  
>> step;
>> >> > they make it easy to _insert later refinements_ inside the  
>> procedure
>> >> > (e.g., tests for current values or for exceptional cases at points
>> >> > within the procedure).
>> >> >
>> >> > All of these things are much more valuable to some of us in our  
>> use of
>> >> > Mathematica than the speed at which the code executes, or the  
>> brevity
>> >> > with which it can be typed.  And none of this is to argue that many
>> >> > basic functions within the language (things like Fourier  
>> transforms,
>> >> > finding matrix eigensolutions, many others) should not be provided  
>> and
>> >> > used as pre-coded non-procedural routines within larger programs.
>> >> >
>> >> > I make a lot of use of self-programmed Modules[] in my own
>> >> programming.
>> >> > The active or working part of the completed program, where  
>> numerical
>> >> > results get asked fror and results displayed, can be quite briefly
>> >> > written, mostly just setting input variables, then calling these
>> >> > modules.  But these modules themselves are heavily procedurally  
>> coded
>> >> > internally, and I think that makes a lot of sense.
>> >> >
>> >
>> >
>>
>>
>> --
>> DrMajorBob at yahoo.com
>>
>>


-- 
DrMajorBob at yahoo.com


  • Prev by Date: Re: How to change the directory for the docs?
  • Next by Date: Re: Mathematica daily WTF
  • Previous by thread: Re: Mathematica daily WTF
  • Next by thread: Re: Mathematica daily WTF