An argument pattern problem: ranges and lists
- To: mathgroup at smc.vnet.net
- Subject: [mg52973] An argument pattern problem: ranges and lists
- From: Simon Anders <simon.anders at uibk.ac.at>
- Date: Sat, 18 Dec 2004 03:59:53 -0500 (EST)
- Organization: University of Innsbruck, Austria
- Sender: owner-wri-mathgroup at wolfram.com
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
- Follow-Ups:
- Re: An argument pattern problem: ranges and lists
- From: "Maxim A. Dubinnyi" <maxim@nmr.ru>
- Re: An argument pattern problem: ranges and lists
- From: DrBob <drbob@bigfoot.com>
- Re: An argument pattern problem: ranges and lists