es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Lista de enteros de F# vs Lista de unidades

Intentando implementar una función simple de quicksort en F#. Soy relativamente nuevo en el lenguaje, pero según lo que he leído y mi comprensión de la sintaxis, esto debería presentar una lista de enteros, pero en cambio presenta la ambigua “lista de unidades”. ¿Por qué esto presenta una lista de unidades y no una lista de enteros? Da un error en “%A” diciendo que los tipos no coinciden.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La función quick está devolviendo una lista de tipo unit en lugar de devolver un tipo int list, por lo tanto el mensaje de error indica que unit list no coincide con int list. Esto puede ser debido a las llamadas ignore al final de las expresiones let que invocan la función quick recursivamente.

    Para solucionarlo, elimine las llamadas ignore al final de las expresiones let:

    let rec quick (cast: int list) mmm =
        match mmm with
        | [] -> []
        | first::rest ->
    
            let small = (rest |> List.filter (fun x -> x < first)) 
            let large = (rest |> List.filter (fun x -> x >= first))
    
            let sortedSmall = quick small // Almacenar el resultado de quick small en una nueva variable
            let sortedLarge = quick large // Almacenar el resultado de quick large en una nueva variable
    
            List.concat [sortedSmall; [first]; sortedLarge]
    

    De esta manera, la función devolverá una lista ordenada de int en lugar de unit.

Comments are closed.