F# spacing и mergesort

У меня есть этот код, предоставленный моим инструктором. Я должен исправить это, обнаружив, что тип F# выводит из mergesort. Когда я пытаюсь отправить в интерактив, я получаю сообщение об ошибке. Я спросил своего профессора, что случилось, и он сказал, что это из-за ошибок форматирования на сайте класса. Я пытался добавить пробелы, удаляя пробелы, которые вы называете это, но каждый раз, когда я получаю

~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 ответ

Решение

Я могу только догадываться, что такое правильный отступ, но…

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)
Другие вопросы по тегам