Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2009

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

Search the Archive

Re: Problem with the 'if' command

  • To: mathgroup at smc.vnet.net
  • Subject: [mg96622] Re: Problem with the 'if' command
  • From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
  • Date: Tue, 17 Feb 2009 06:28:00 -0500 (EST)
  • Organization: Uni Leipzig
  • References: <gncme2$fid$1@smc.vnet.net>
  • Reply-to: kuska at informatik.uni-leipzig.de

Hi,

 > if the list has an off number of members (condition is false)

The only way that Length[list]/2 is 0 is that list is {}, or
do you mean Mod[] ?? or would you like to use EvenQ[] ???

And even if this error is corrected, you code compute something
strange, but not the median.

Regards
   Jens

mathandpi wrote:
> Hi everyone,
> I'm a new Mathematica user so I may be missing something fairly obvious, but I'm having trouble with the 'if' command.
> I'm writing a function that is supposed to return the median of a list (I know such a function already exists, but I need to create one myself).
> 
> What I have is:
> 
> newMedian[list_] := 
>  If[Length[list]/2 == 0, 
>   1/2*(list[[(Length[list]/2) + 1]] + list[[(Length[list])/2]])
>   , list[[(Length[list] + 1)/2]]]
> 
> if the list has an off number of members (condition is false), it evaluates as expected.  If it's even, however,
> 
> newMedian[{1, 2, 3, 4}] returns:
> Part::pspec: Part specification 5/2 is neither an integer nor a list of integers.
> 
> BUT
> 
> list={1,2,3,4};
> 
> 1/2*(list[[(Length[list]/2) + 1]] + list[[(Length[list])/2]])
> returns 5/2, as expected so that code is right.
> 
> It seems likes its actually evaluating the false part of the code (trying to find the 5/2'ith element in a list), even though the condition is true.
> 
> What's going on here?
> 
> Thanks
> 


  • Prev by Date: Re: Problem with the 'if' command
  • Next by Date: Re: pfa2pfb
  • Previous by thread: Re: Problem with the 'if' command
  • Next by thread: Re: Problem with the 'if' command