f # espacement et mergesort
-
25-10-2019 - |
Question
J'ai ce code fourni par mon instructeur. Je suis censé corriger en trouvant quel type f # infère de mergesort. Lorsque je tente d'envoyer interactive je reçois une erreur. Je demandai à mon Proffesor ce qui était erroné et il a dit que cela était dû à des erreurs de formatage sur le site Web de la classe. Je l'ai essayé d'ajouter des espaces suppression des espaces que vous nommez, mais chaque fois que je reçois un
~ vs4489.fsx (8,14): erreur FS0588: Bloquer la suite de cette 'let' est inachevée. Attendez-vous à une expression.
sur les deux dernières méthodes. Comment puis-je réparer cela?
Voici le code
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)
La solution
Je ne peux deviner à ce que l'empreinte est correcte, mais ...
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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow