6
votes

Min / max et élément le plus fréquent d'une liste

Je dois écrire un programme qui donne une sortie un tuple avec: min et max d'une liste non vide et la valeur qui apparaît le plus souvent. En particulier:

let rec max_list xs =
    match xs with
    | [] -> failwith "xs" "Empty list"
    | [x] -> x
    | x1::x2::xs' -> max_list((max2 x1 x2)::xs');;

f#

1 commentaires

Comme une note latérale; votre max_list semble un peu compliqué pour son objectif; Pourrait être plus simple de passer autour du maximum actuel avec le reste de la liste et de la mettre à jour si la tête actuelle est supérieure. ou sans passer autour; Il suffit de retourner le max entre la tête actuelle et la max_list de la queue


3 Réponses :


2
votes
let mode xs =
    xs
    |> List.groupBy id
    |> List.map (fun (i, is) -> i, Seq.length is)
    |> List.maxBy snd
    |> fst

4 commentaires

Pourquoi ne pas utiliser de maxby immédiatement, sans carte? (List.Maxby (Fun (_, X) -> Seq.Length X))


@FoggyFinder aucune raison particulière :)


Parce que je ne peux utiliser aucune fonction en dehors de ce qui a été expliqué par le professeur: Et c'est mon problème quand je dois faire des exercices, car aussi dans ce cas, j'ai immédiatement pensé à Lis.map, list.fold, Seq.fut etc.


@Simonecalliari Normalement, l'exercice consiste à passer d'une implémentation récursive pour utiliser un pli, mais vous devriez pouvoir aller aussi bien.




0
votes

option sans l'utilisation de modules standard: xxx

dotnetfiddle

sur la deuxième question - montrez leurs tentatives de résoudre.


0 commentaires