2016-08-19 45 views
1

用我的原代碼,我一直就行let numDigits = numDigits - 1 in麻煩與OCaml的嵌套如果

原始越來越Error: Parse error: [expr level ;] expected after "in" (in [expr])

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