2012-10-28 4 views
2

저는 OCaml을 처음 배우고 있으며, 매우 모호한 "구문 오류"에 약간의 문제가 있습니다. 그래서 같이 generateboxes 함수를 정의 할 때 :OCaml "else"구문 오류

let rec generateboxes a b = 
    if a = (add1 b) then (force_newline()); (print_sting "Done!") 
    else if [1] = (Array.get finalarray a) then (populatebox 
    (numbertoposition a) a); (generateboxes (add1 a) b) 
    else (generateboxes (add1 a) b);; 

컴파일러 오류 메시지 제공 "구문 오류"그리고 제 else 포인트한다. 그런 메시지를 출력하는 코드가 눈에 띄게 틀린 점이 있습니까? (나는 코드가 컨텍스트 밖에 있다는 것을 알고 있지만 구문 오류가 있다면 그것은 중요하지 않다). 당신이 then에 하나 이상의 문 또는 else 조항이있는 경우

+2

을 당신이 더 이상 "일"당을 넣지 추천 자동 들여 쓰기를 수행하는 텍스트 편집기를 사용하십시오. caml-mode, tuareg-mode 또는 typerex를 사용하는 Emacs는이를 위해 아주 좋습니다. Tab 키를 한 번 누르면 현재 줄을 들여 쓰기 만하면됩니다. 그것은 바로 구문 오류를 설명했을 것입니다. –

답변

6
let rec generateboxes a b = 
    if a = add1 b then (force_newline(); print_sting "Done!") 
    else if [1] = Array.get finalarray a then 
     (populatebox (numbertoposition a) a; generateboxes (add1 a) b) 
    else generateboxes (add1 a) b;; 

, 당신은 그들에게 괄호 안에 넣을 필요가있다. 양자 택일로, 당신은 그들 주위 begin ... end를 넣을 수 있습니다 :

let rec generateboxes a b = 
    if a = add1 b 
    then begin 
     force_newline(); 
     print_sting "Done!" end 
    else if [1] = Array.get finalarray a 
    then begin 
     populatebox (numbertoposition a) a; 
     generateboxes (add1 a) b end 
    else generateboxes (add1 a) b;; 

(나는 또한 코드를 명확하게하기 위해 몇 불필요한 괄호를 제거했는지 있습니다.)

+0

정말 고맙습니다. 전에는 사용하지 않았던 표현식을 사용했기 때문에, 나이를 먹어서 알아낼 수 있었을 것입니다! – Balthasar

+0

가볍기 때문에 괄호를 선호하는 경향이 있습니다 (C 또는 Java에서 중괄호를 사용하는 것과 같은 방식으로 사용됩니다). 그러나 이는 맛의 문제입니다. – jrouquie

+0

내가하는 일은 키워드 옆에 괄호를 넣는 것입니다 :'if ... then (\ n .... \ n) else ...' – lukstafi