Re: Piecewise vs. /; ?

*To*: mathgroup at smc.vnet.net*Subject*: [mg104024] Re: Piecewise vs. /; ?*From*: Daniel Lichtblau <danl at wolfram.com>*Date*: Fri, 16 Oct 2009 07:18:17 -0400 (EDT)*References*: <hashpc$qu8$1@smc.vnet.net> <hav19a$4gr$1@smc.vnet.net> <200910151119.HAA09248@smc.vnet.net>

Dan Dubin wrote: > Folks -- > > I would respectfully disagree with the idea that /; is more general > than Piecewise. The example given, a function that returns a > different value in the morning than the evening, is simply a > time-dependent function that could be constructed using Piecewise, as > in > > f[x_,h_] = Piecewise[{{x, h < 12}, {-x, h >= 12}}]; > > and called via > > f[x,DateList[[4]]] > > > In fact, it seems to me that any difference in the way that > Mathematica interprets Piecewise and conditionals should be removed > from later editions of Mathematica, since as far as I can see the > difference between them is merely a Mathematica-specific matter of > the mechanics of how the expressions are evaluated with little (or > no?) utility, that causes considerable confusion among new users. I > don't see any benefit in this distinction, but feel free to convince > me otherwise! > [...] The documentation makes quite clear that Condition is a construct meant for, and understood by, pattern matching functions. In this capacity it may be used for programmatic constructs, e.g. DownValues that only evaluate under certain conditions. Piecewise would be a terrible emulator of this functionality. By way of contrast, functions like NIntegrate understand mathematical constructs such as Piecewise. As some examples earlier in the thread indicated, evaluation of "functions" defined in terms of Condition might leave one with an unintended integrand. Let me comment on some specifics of your note. "[A]s far as I can see the difference between them is merely a Mathematica-specific matter of the mechanics of how the expressions are evaluated..." The life blood of Mathematica semantics is in the mechanics of evaluation. While this might well be deemed Mathematica-specific, it determines whether and how the language functions. "with little (or no?) utility,..." The differences in supported functionality, several presented in this thread, argue otherwise. But I concede this is a matter of opinion. "that causes considerable confusion among new users." I think some amount of confusion is not new, but rather of the following form. One defines a function using multiple DownValues with Conditional, then tries to use it in Reduce or Integrate, and this has an unwanted outcome. Question might be: "Why does Piecewise work and not my definition?" A few versions ago, prior to introduction of Piecewise to Mathematica*, the question was simply "Why does this not work?" Point being this: Piecewise has extended the range of Mathematica, to do things that Condition was never designed to do, and for which evaluation semantics do not (and never did) support use of Condition. Bottom line: The intended and supported usage of each tend to be quite different, though there may be some amount of overlap at least in terms of attempted usage. Suffice it to say, neither functionality will be getting supplanted by the other. Daniel Lichtblau Wolfram Research *Around 2003 we had a design meeting where the R&D Director said "I plan to introduce some new functionality to Mathematica, piecewise". Naively, I said "Okay. What's the functionality." True story.

**References**:**Re: Piecewise vs. /; ?***From:*Dan Dubin <ddubin@ucsd.edu>