MathGroup Archive 2012

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

Search the Archive

Re: Tips for writing correct, non trivial Mathematica Libraries

  • To: mathgroup at smc.vnet.net
  • Subject: [mg124453] Re: Tips for writing correct, non trivial Mathematica Libraries
  • From: Nehal Patel <nehal.alum at gmail.com>
  • Date: Fri, 20 Jan 2012 01:50:41 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <201201191012.FAA03722@smc.vnet.net> <3609A129-8BFE-453D-B414-9C1D4366BA43@mimuw.edu.pl>

On Jan 19, 2012, at 6:39 AM, Andrzej Kozlowski wrote:

>
> On 19 Jan 2012, at 11:12, Bill Rowe wrote:
>
>>>
>>> geom[list_] := Apply[Times, list]^(1/Length[list])
>>
>>> So, this does a bad thing for geom[ x+ y]  (returns (Sqrt[x y])
>>
>> What were you expecting here? This looks correct to me
>
> Clearly he sees what actually is a powerful feature of Mathematica as 
a "bad thing". The feature is that a function whose arguments are not 
restricted by pattern maching can be put to a more general use. I think 
it's great and not "bad". If you want to restrict the function to work 
on lists you can do this:
>

Hi -- thanks for your comment.  Actually I think the pattern matching is 
the coolest thing.  my point is that when combined with how Mathematica 
treats + (and in general, Flat and Orderless operators) it becomes a lot 
harder to reason about whether  a function handles all edge cases 
correctly.  So for instance nobody would expect the geometric mean of x 
+ y to be  Sqrt[x y], it should be (x + y)^1 = x+ y

Separately, GeometricMean does do something reasonable for 
GeometricMean[x + y] (give it a try), and I wish it were easier to see 
what syntax it uses.  





  • Prev by Date: Derivatives Output as TraditionalForm
  • Next by Date: Re: Vectorlength independet of axis-scale using VectorPlot?
  • Previous by thread: Re: Tips for writing correct, non trivial Mathematica Libraries
  • Next by thread: Re: Tips for writing correct, non trivial Mathematica Libraries