f#spacing和mergesort

时间:2012-02-16 00:19:17

标签: f# f#-scripting

我的导师提供了这段代码。我应该通过查找mergesort中的f#类型来修复它。当我尝试发送到交互式时,我得到一个错误。我问我的proffesor出了什么问题,他说这是由于课堂网站上的格式错误造成的。我试过添加空格去除你命名的空格,但每次我得到一个

  

~vs4489.fsx(8,14):错误FS0588:阻止此'let'未完成。期待一个表达。

关于最后两种方法。我怎样才能解决这个问题?

这是代码

 let rec merge = function

 | ([], ys) -> ys

 | (xs, []) -> xs

 | (x::xs, y::ys) -> if x < y then x :: merge (xs, y::ys)

 else y :: merge (x::xs, ys)
 let rec split = function

 | [] -> ([], [])

 | [a] -> ([a], [])

 | a::b::cs -> let (M,N) = split cs

 (a::M, b::N)

let rec mergesort = function

| [] -> []

| L -> let (M, N) = split L

merge (mergesort M, mergesort N)

1 个答案:

答案 0 :(得分:5)

我只能猜测关于正确的缩进是什么,但是......

let rec merge = function
| ([], ys) -> ys
| (xs, []) -> xs
| (x::xs, y::ys) -> if x < y then x :: merge (xs, y::ys)
                    else y :: merge (x::xs, ys)

let rec split = function
| [] -> ([], [])
| [a] -> ([a], [])
| a::b::cs -> let (M,N) = split cs
              (a::M, b::N)

let rec mergesort = function
| [] -> []
| L -> let (M, N) = split L
       merge (mergesort M, mergesort N)