2017-10-20 80 views
1

我写了这个代码与Visual Studio,但是当我编译它,它给我回这些警告:编译器警告:FS0058:可能不正确缩进

FS0058:可能不正确缩进,此令牌是越位上下文从9:80开始。尝试进一步缩进此令牌或使用标准格式

但是,如果我尝试编译它与OCaml编译器它的作品。

let converti_tempo = (fun x -> if x < 0 then failwith "error" else if x < 1000 then (0, 0, x) else 
let rec m = x % 1000 
let s = (x/1000) % 60 
let mm = ((x/1000)/60) % 60 
in (mm,s ,m));; 

回答

1

在第一行的末尾有一个else。这意味着else的表达式将在下一行中定义,因此必须一直缩进到else,然后再多一点。下面的代码:

let converti_tempo = (fun x -> if x < 0 then failwith "error" else if x < 1000 then (0, 0, x) else 
                           let rec m = x % 1000 
                           let s = (x/1000) % 60 
                           let mm = ((x/1000)/60) % 60 
                           in (mm,s ,m));; 

你也可以写这样的:

let converti_tempo = (fun x -> if x < 0 then failwith "error" 
           else if x < 1000 then (0, 0, x) 
           else 
            let rec m = x % 1000 
            let s = (x/1000) % 60 
            let mm = ((x/1000)/60) % 60 
            in (mm,s ,m));; 
1

我会说这是写这个功能的更“地道”的方式

let converti_tempo x = 
    if x < 0 then 
     failwith "error" 
    elif x < 1000 then 
     (0, 0, x) 
    else 
     let m = x % 1000 
     let s = x/1000 % 60 
     let mm = x/1000/60 % 60 
     (mm, s, m) 
+0

太谢谢你了! –