Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2004
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2004

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

Search the Archive

Re: An argument pattern problem: ranges and lists

  • To: mathgroup at smc.vnet.net
  • Subject: [mg52993] Re: [mg52973] An argument pattern problem: ranges and lists
  • From: Bob Hanlon <hanlonr at cox.net>
  • Date: Sun, 19 Dec 2004 06:14:36 -0500 (EST)
  • Reply-to: hanlonr at cox.net
  • Sender: owner-wri-mathgroup at wolfram.com

Use TagSet ( /: )

pauli /: f[pauli[x_,y_]] := x+y /; 0<=y<=4;
pauli /: g[pauli[x1_,y1_], pauli[x2_,y2_]] :=
    (x1+y1)*(x2+y2) /; 0<=y1<=4 && 0<=y2<=4;

{f[pauli[a,1]],f[pauli[a,5]]}

{a + 1, f[pauli[a, 5]]}

{g[pauli[a,1],pauli[b,2]],
  g[pauli[a,1],pauli[b,5]]}

{(a + 1)*(b + 2), g[pauli[a, 1], pauli[b, 5]]}


Bob Hanlon

> 
> From: Simon Anders <simon.anders at uibk.ac.at>
To: mathgroup at smc.vnet.net
> Date: 2004/12/18 Sat AM 03:59:53 EST
> To: mathgroup at smc.vnet.net
> Subject: [mg52993] [mg52973] An argument pattern problem: ranges and lists
> 
> Hi,
> 
> I am trying to use argument patterns to ensure that my function is only 
> applied onto arguments which have the format
>     pauli [_, _]
> where the second argument should be an integer between 0 and 4.
> 
> So I defined a type
>     pauliT = HoldPattern [pauli [_, s_Integer] /; s>=0 && s<=4];
> 
> and declared my function as follows:
>    f [p:pauliT] := DoSomething
> 
> This works fine, but another function takes a pair of arguments
>    g [p:{pauliT,pauliT}] := DoSomethingElse
> 
> This is never called, because the pattern cannot be matched.
> 
> I observed:
> 
>    pauliT = HoldPattern [pauli [_, s_Integer] /; s>=0 && s<=4];
>    MatchQ[{pauli[1, 2], pauli[1, 3]}, {pauliT, pauliT}]
>    --> False
> 
> The problem seems to be that I named the second argument 's', because if 
> I delete this name, it matches:
> 
>    pauliT = HoldPattern [pauli [_, s_Integer]];
>    MatchQ[{pauli[1, 2], pauli[1, 3]}, {pauliT, pauliT}]
>    --> False
> 
>    pauliT = HoldPattern [pauli [_, _Integer]];
>    MatchQ[{pauli[1, 2], pauli[1, 3]}, {pauliT, pauliT}]
>    --> True
> 
> So, how do I specify the range condition correctly?
> 
> Thanks in advance,
>    Simon
> 
> 
> 
> 


  • Prev by Date: Re: File association in 5.01
  • Next by Date: Re: An argument pattern problem: ranges and lists
  • Previous by thread: Re: An argument pattern problem: ranges and lists
  • Next by thread: Re: An argument pattern problem: ranges and lists