2016-08-19 3 views
1

С моим исходным кодом я продолжал получать Error: Parse error: [expr level ;] expected after "in" (in [expr]) на линии let numDigits = numDigits - 1 inПроблемы с OCaml вложенной если

Оригинала:

let rec rev_int num = 
    if num/10 == 0 then 
    num 
    else 
    let temp = num mod 10 in 

    let numDigits = String.length(string_of_int num) - 1 in 

    if num < 0 then 
     let numDigits = numDigits - 1 in 
    else 
     let numDigits = numDigits + 0 in 

    let num = (num - temp)/10 in 
    temp * int_of_float(10.0 ** float_of_int numDigits) + rev_int num 

с вариациями:

if num < 0 then 
    let numDigits = numDigits - 1 in; 
else 
    let numDigits = numDigits + 0 in; 

if num < 0 then 
    let numDigits = numDigits - 1 in 
else begin 
    let numDigits = numDigits + 0 in end 

Я пересмотрел код, и теперь он работает, но мне было интересно, есть ли способ сделать это с вложенными и менее избыточными.

После доработки:

let rec rev_int num = 
    if num/10 == 0 then 
    num 
    else 
    let temp = num mod 10 in 

    let numDigits = String.length(string_of_int num) - 1 in 

    if num < 0 then 
     let numDigits = numDigits - 1 in 
     let num = (num - temp)/10 in 
     temp * int_of_float(10.0 ** float_of_int numDigits) + rev_int num 
    else 
     let numDigits = numDigits + 0 in 
     let num = (num - temp)/10 in 
     temp * int_of_float(10.0 ** float_of_int numDigits) + rev_int num 
+2

Может ли это быть более уместно спросить на [codereview.SE] (http://codereview.stackexchange.com/questions/tagged/ocaml)? –

ответ

1

От Hunan Rostomyan

let rec rev_int num = 
    if num/10 == 0 then 
    num 
    else 
    let temp = num mod 10 in 

    let numDigits = String.length(string_of_int num) - 1 in 

    let numDigits = numDigits - (if num < 0 then 1 else 0) in 
    let num = (num - temp)/10 in 
    temp * int_of_float(10.0 ** float_of_int numDigits) + rev_int num 
Смежные вопросы