2016-08-18 3 views
0

코드가 print 문없이 컴파일됩니다. 그러나 print 문을 사용하면 해당 줄에 오류가 발생합니다 (Error: This expression has type unit but an expression was expected of type int). 또한OCaml에서 문자열 인쇄시 문제가 발생했습니다.

let rec rev_int num = 
    if num/10 == 0 then 
    num 
    else 
    let temp = num mod 10 in 
    let numDigits = string_of_int num in 
    Printf.printf "%s" numDigits 

    let num = (num - temp)/10 in 
    temp * (10 * String.length(numDigits)) + rev_int num;; 

답변

2

의 printf 줄의 끝에서 실종 세미콜론이 있습니다 print_string numDigits을 시도했습니다.

대체하려면 let() =으로 시작하고 in으로 끝내십시오.

+0

감사합니다. 이거 고쳐! 호기심에서 벗어나 다른 코드'printf'는 세미콜론이 없거나 둘로 끝납니다. 왜이 경우에 하나? – stumped

+0

2 세미콜론은 더 이상 사용되지 않으며 최상위 수준의 정의를 분리하기위한 것입니다. ocaml 대화식 루프 외부에서 사용하지 않는 것이 좋습니다 (어쨌든 필수 항목). – mookid

+0

세미콜론은 부작용 ('unit' typed values)을 분리하는 것입니다. ex :'i = 1에서 5까지 do x = ref 0.0 in do x : =! x +. 1./.float i; Printf.printf "% f \ n"! x; 완료; 컴파일러는'; '앞에 오는 값이'unit' 유형인지 확인합니다 (여기에'x : =! x + .1/.float i'','Printf.printf "% f \ n"! x '그리고 전체 루프. – mookid

관련 문제