2016-08-18 6 views
0

Код компилируется без инструкции печати. Однако с оператором печати я получаю ошибку на этой строке, которая Error: This expression has type unit but an expression was expected of type int. Я также попытался print_string numDigitsПроблема с печатью строки в 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 линии.

Альтернативный вариант: начинайте эту линию с let() = и заканчивайте ее in.

+0

Спасибо; это фиксировало это! Просто из любопытства, на другом коде 'printf' заканчивается либо без двоеточия, либо с двумя. Почему в этом случае? – stumped

+0

2 точки с запятой устарели и предназначены для разделения определений верхнего уровня. Я рекомендую не использовать его вне интерактивного цикла ocaml (там, где это обязательно). – mookid

+0

1 точка с запятой состоит в разделении побочных эффектов (введенные значения 'unit'); ex: 'let x = ref 0.0 in for i = 1 to 5 do x: =! x +. 1./.float i; ! Printf.printf "% е \ п" х; сделано; '. Компилятор гарантирует, что значения перед ';' имеют тип 'unit' (здесь значения' x: =! X +. 1./.float i'; 'Printf.printf"% f \ n "! X 'и весь цикл. – mookid