2014-10-10 4 views
0

다른 함수의 명령문 패턴이 일치하지 않을 때 실행되는 패턴을 포함하여 다른 패턴에 대해 여러 정의가있는 함수를 만들 수있는 방법이 있습니까?Haskell 함수 패턴이 'otherwise'

예컨대 :

someFunc (pattern1) = def1 
someFunc (pattern2) = def2 
someFunc (<otherwise/all other possible values>) = def3 

또는 이것이 가능하지 않다면, 어떻게 달성 할 수

? 사전에

감사합니다!

안부, Skyfe. 위의 기능이 하지 해당

isJust _ = False 
isJust (Just _) = True 

때문에 그래서, 대한 명확한

isJust :: Maybe a -> Bool 
-- Here we don't care about what's inside the `Just` 
isJust (Just _) = True 
-- Here we don't care what it is, it's not a `Just` so return `False` 
isJust _ = False 

은, 패턴이 당신이 그들을 정의하는 순서로 시도됩니다 :

답변

5

당신은 와일드 카드 일치 _을 사용할 수 있습니다 _ 패턴이 먼저 일치합니다. 어떤 컴파일러가 실제로하는 일은 첫 번째 함수는

isJust x = case x of 
    Just _ -> True 
    _  -> False 

에 해당하는 것, 그래서 우리가 지금까지 존재 한 모든 다른 프로그래밍 언어에서 알다시피하고, 사례 문을 위해 노력하는, 내부적으로 case 문에이 선회 .

+0

하지만 두 정의가 모두 가능하면 어떻게 될까요? 그러면 자동으로 입력 값에 맞는 첫 번째 정의가 사용됩니까? 귀하의 예제에서 Just 값은 와일드 카드로 두 번째 정의가 너무 맞을 것입니다. – user2999349

+0

패턴을 정의한 순서대로 시도합니다. 그래서'isJust _ = False'; 'isJust (Just _) = True'는 같은 함수가 될 수 없습니다. – bheklilr

+0

알았어, 고마워! – user2999349