2011-02-06 2 views
5

문 :하스켈 IF 나는 하스켈 꽤 새로운 해요,하지만 당신은 if 문을 만들 경우

function a b c 
    | (a+b == 0) = True 
    | --etc. 
    | otherwise = False 

이 두 번째 if 문 else가 다른 언어로, 또는 또 다른 경우를 경우와 동일 . 전 출력을 가질 수있는 것처럼 전자를 가정합니다. 그러나 나는 단지 확신하고 싶습니다.

+0

네 추리의 라인은 바른 길 위에 있었다. 둘 이상의 오른쪽면을 "처형"한다는 것은 무엇을 의미할까요? 부작용이 없으므로 우리가해야할 모든 일이 돌아와야합니다. 우리는 어떤 가치를 반환 할 것입니까? 아니면 우리는 그들을 결합 할 방법이 있어야 할 것입니다. 우리는 어떤 방법으로 사용할 것입니까? (하스켈 철학을 안내하는 몇 가지 질문이 있습니다) – luqui

답변

9

사용 된 구성을 가디언이라고합니다. Haskell은 하나의 조건이 True이 될 때까지 주어진 대안을 차례로 검사합니다. 그런 다음 해당 방정식의 오른쪽을 계산합니다.

당신은 꽤 잘 다른 언어에서 구성 elseif 문 /는 IF 대표의 따라서

function n 
    | n == 1 = ... 
    | n == 2 = ... 
    | n >= 3 = ... 

가드 종류를 작성할 수 있습니다. otherwise 단순히 True로 정의되기 때문에,

| otherwise = 

마지막

은 항상 사실 때문에 포괄 else 절을 나타내는 것입니다.

하스켈은 보통 a = if foo then 23 else 42 문을 사용합니다.

+0

의미가 있습니다. 감사! – switz

+2

하스켈에서'if' 문의'else' 부분은 필수 항목입니다. [Haskell 2010 : Conditionals] (http://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-320003.6)를 참조하십시오.그리고 나서 [언제 "와"제외] "(http://hackage.haskell.org/packages/archive/base/latest/doc/html/Control-Monad.html#v:when) –

1

다른 경우와 같아야합니다.

하단 패턴 otherwise은 실제로는 단지 True입니다. 따라서 첫 번째 일치가 실패한 경우보다 구체적인 값과 그렇지 않은 값을 얻을 수 있습니다.

2

여기에있는 내용은 실제로 if 문이 아니라 가드입니다. 그러나 이전 사례 (여기에서 사례는 |= 사이의 표현이 일치하지 않음)가 일치하지 않는 경우에만 두 번째 사례가 '실행'됩니다 (정확도는 True). otherwiseTrue의 동의어입니다 (항상 "일치"하는 방식).

1

정확함. 가드를 사용했지만 표현한 방식은 if 문을 사용하는 것과 거의 같습니다. 결과를 산출하기 위해 조건부를 테스트하는 흐름은 사용자가 작성한 가드를 경비로 나열된 순서대로 수행됩니다.

(a+b == 0) 

etc. 

두번째 체크 등, 선행하는 조건에 해당하지 제공된다 먼저 확인한다.

otherwise 

앞의 조건이 참이 아니라면 마지막으로 검사합니다.