2017-10-20 85 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

太謝謝你了! –