Re: An argument pattern problem: ranges and lists
- To: mathgroup at smc.vnet.net
- Subject: [mg53069] Re: An argument pattern problem: ranges and lists
- From: "Maxim A. Dubinnyi" <maxim at nmr.ru>
- Date: Wed, 22 Dec 2004 04:53:10 -0500 (EST)
- References: <200412180859.DAA02232@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
HoldPattern[pauli[_, _Integer?(0 <= # <= 4 &)]] Simon Anders wrote: >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 > > > > >
- References:
- An argument pattern problem: ranges and lists
- From: Simon Anders <simon.anders@uibk.ac.at>
- An argument pattern problem: ranges and lists