
Or, if you need several cases, you can use something like:
funcGuard n | n `elem` [2,5,9] = 5 | n `elem` [4,18] = 1 | otherwise = 7
or, if you want an expression:
caseGuard n = case undefined of _ | n `elem` [2,5,9] -> 5 | n `elem` [4,18] -> 1 | otherwise -> 7
mike
Dean Herington
Mark Carroll wrote:
I can write a function x :: Integer -> Integer that returns 5 if I give it 2, 5 or 9, or 7 otherwise. Say,
x 2 = 5 x 5 = 5 x 9 = 5 x _ = 7
Generally, this is a question about where multiple cases lead to the same thing, maybe even in the middle of a function. (Like C's "case 1: case 2: case 3: foo; break;".)
Does it get any better than this, though? I can't convince 'case' to do something like,
case n of 2,5,9 -> 5 otherwise -> 7
Am I missing some syntax somewhere? I'm lost in the grammar in the Haskell report.
-- Mark
I would write:
if elem n [2,5,9] then 5 else 7
Dean

On 27 Aug 2001, Mike Gunter wrote: (snip)
Or, if you need several cases, you can use something like:
funcGuard n | n `elem` [2,5,9] = 5 | n `elem` [4,18] = 1 | otherwise = 7
or, if you want an expression:
caseGuard n = case undefined of _ | n `elem` [2,5,9] -> 5 | n `elem` [4,18] -> 1 | otherwise -> 7
Thanks - that's very helpful! (-: I hadn't thought of using 'elem'. Most of the cases are going to be ones like "if x = 5 or x = 7" instead of "if x = 6 or y = 'a'" so that should work well. -- Mark
participants (2)
-
Mark Carroll
-
Mike Gunter