같은
이의 뭔가 그냥 구현되지 않은 뭔가를 보여주는 것이 아니라, 우리의 프로그램을 일으키는 계산을 대표하는 의미가 있어요 실패. 우리가 실제로 무한 루프로 자신을
undefined
를 정의 할 수 있습니다 예를 들어
undefined = let x = x in x
undefined = undefined
그래서 정말 우리가 정당한 사유거나 프로그램이 충돌하거나 루프 영원히, 그러나 결코 어떤 값 undefined :: a
에두고있다하고있는 그것을 평가.
당신이 방금이 typechecks 때문에이
foo :: Bar -> Baz -> Quux
foo bar baz = foo bar baz
을 할 수있는 구현하는 방법을 모르는 몇 가지 크고 복잡한 기능을 가지고 따라서 경우, 컴파일거야, 그리고 우리의 다른 부분을 테스트 할 수 있습니다 우리의 프로그램.
그러나 실수로 프로그램의 해당 부분을 실행할 때 무한 루프가 발생하는 것은 좋지 않으므로 GHC 및 다른 사람들은 undefined
을 다르게 구현합니다.
-- In GHC
error msg = throw (ErrorCall s)
undefined = error "Prelude.undefined"
그래서 더 나은 디버깅 기능은 하단 혼란, HAMMAR의 개념을 발견하는 경우
foo bar baz = undefined
foo bar baz = error ("Tried to evaluate foo with" ++ show bar ++ show baz)
로 정의되지 않은 함수를 떠나 : 그들은 그들 예를 들어, 프로그램을 중단하고 오류 메시지를 방출해야 위대한 게시 됨 answer
'정의되지 않음'을 사용하십시오. 함수를 호출하면'Exception : Prelude.undefined'가됩니다. –
또는'isDivisor x y = error "아직 구현되지 않았습니다.", 또는 ghci가 반복되도록하려면'isDivisor x y = isDivisor x y'입니다. –