MathGroup Archive 1997

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

Search the Archive

Re: Which, If and "neither True nor False"

  • To: mathgroup at smc.vnet.net
  • Subject: [mg9689] Re: [mg9652] Which, If and "neither True nor False"
  • From: Allan Hayes <hay at haystack.demon.co.uk>
  • Date: Fri, 21 Nov 1997 01:31:25 -0500
  • Sender: owner-wri-mathgroup at wolfram.com

"Paul E Howland" <PEHOWLAND at dra.hmg.gb> [mg9652] Which, If and "neither
True nor False" writes:

> I've just stumbled across a bug in some old code of mine, in  
which > I had a statement of the form:
>
> 	Which[
>         a<b, DoSomething[],
>         a>c, DoSomethingElse[],
>         True, DoThis[]
>         ]
>
> which I assumed would call DoThis[] if neither a<b nor a>c were
> True. However, what I didn't realise is that if a is undefined,
> then the first two conditions are neither True nor False, and
> Mathematica returns the whole Which statement unevaluated!
>
> The If statement has an optional fourth argument which is  
executed > if the test returns neither True nor False.  Is it  
possible to do
> the same in a Which statement?  If not, why not?!

Paul,
How about the following kind of code?

In[1]:=
	Which[TrueQ[U],a, True, b]
Out[1]=
		b


Here are some notes on Which.

Which[test1, v1, test2, v2 ... testn, vn] evaluates as follows. For i =
1,2,...
	- evaluate testi to testi*
	- if testi* is True return the value of vi
	- if testi* is False remove testi and wi
	- if testi* is neither True nor False return
		Which[testi*, vi, test(i+1), v(i+1)... testn, vn]
	- if Which[] is reached return Null

Which[test1, v1,..., True, v]gives the value of v when every testn  
gives  False;
Which[TrueQ[test1], v1 ... True, v]gives the value of v when no   testn
gives  True.

Examples


In[2]:= F = False; T = True; U = vU; a = va; b = vb;

 {Which[F,a,T,b],
  Which[F,a,U,b,T,b],
  Which[TrueQ[U],a,True,b],
  Which[F,a,F,b],
  Which[]
 }
Out[3]=
	{vb,Which[vU,b,T,b],vb,Null,Null}
	
Allan Hayes
hay at haystack.demon.co.uk
http://www.haystack.demon.co.uk/training.html voice:+44 (0)116 2714198
fax: +44 (0)116 2718642
Leicester,  UK


  • Prev by Date: RE: Which, If and "neither True nor False"
  • Next by Date: Interpolatingfunction
  • Previous by thread: RE: Which, If and "neither True nor False"
  • Next by thread: Re: Which, If and "neither True nor False"