2010-05-25 15 views
18

방금 ​​하스켈을 배우고 있습니다. I는 (C ^까지 무기한 중단)이 계승 함수 (ghci 이내)haskell의 무한 루프? (초보자)

Prelude> let ft 0 = 1 
Prelude> let ft n = n * ft (n - 1) 
Prelude> ft 5 

생성이라고 생각.

나를 올바른 방향으로 안내 할 수 있습니까?

감사합니다.

답변

29

두 개의 개별 let 문은 서로 독립적으로 해석됩니다. 먼저 함수 ft 0 = 1이 정의되고 새 함수 ft n = n * ft (n - 1)이 정의되어 첫 번째 정의를 덮어 씁니다.

두 가지 경우로 하나의 함수를 정의하려면 두 경우를 하나의 let 문에 넣어야합니다. GHCI에서 한 줄에서이 작업을 수행하려면하면 ;에 의해 두 경우를 분리 할 수 ​​프롬프트 : 즉

Prelude> let ft 0 = 1; ft n = n * ft (n - 1) 
Prelude> ft 5 
120 
+8

, 당신이 (거의) 올바른 하스켈 쓴 것; 문제는 GHCI가 별도의 소스 파일에 넣은 것과 다른 구문을 허용한다는 것입니다. 당신은,하지만, 단어'let', 파일 Factorial.hs에, 다음 GHCI에 입력 (즉, "거의"입니다)하지 않고 그 두 줄을 넣어 경우 ': Factorial' 를로드 한 후 '피트 5' 120을 얻을 것입니다. "do notation"이 아직 나왔는지는 모르지만 (예 : I/O) GHCI 프롬프트에서 허용되는 구문은 내부에서 허용되는 구문과 동일합니다. 차단해라. –