Tri liste Ocaml
Fermé
yaldoo
-
23 nov. 2011 à 12:25
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 23 nov. 2011 à 16:14
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 23 nov. 2011 à 16:14
A voir également:
- Tri liste Ocaml
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Tri excel - Guide
- Liste site streaming illégal - Accueil - Services en ligne
- Liste de diffusion whatsapp - Guide
2 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
Modifié par KX le 23/11/2011 à 12:40
Modifié par KX le 23/11/2011 à 12:40
Des sites sur Caml j'avoue que je n'en connais pas beaucoup.
Le Site du Zéro a un tutoriel mais je ne sais pas s'il est fini. Il y a bien sûr la doc de l'INRIA mais ce n'est pas très pédagogique... Tente une recherche Google pour trouver des TD de programmation fonctionnelle niveau master. Tu trouveras des exercices et peut-être les corrections (y a plus qu'à filtrer pour trouver ceux sur les listes).
Ici ton problème est assez facile à corriger. Lorsque tu as (a<=tete) tu renvoie a et queue, mais du coup tu perds la tête (avec et sans jeu de mots ^^)
Ce que tu peux faire c'est donc if(a<=tete) then a::l et ça résout ton problème ;-)
La confiance n'exclut pas le contrôle
Le Site du Zéro a un tutoriel mais je ne sais pas s'il est fini. Il y a bien sûr la doc de l'INRIA mais ce n'est pas très pédagogique... Tente une recherche Google pour trouver des TD de programmation fonctionnelle niveau master. Tu trouveras des exercices et peut-être les corrections (y a plus qu'à filtrer pour trouver ceux sur les listes).
Ici ton problème est assez facile à corriger. Lorsque tu as (a<=tete) tu renvoie a et queue, mais du coup tu perds la tête (avec et sans jeu de mots ^^)
Ce que tu peux faire c'est donc if(a<=tete) then a::l et ça résout ton problème ;-)
La confiance n'exclut pas le contrôle
par contre cette fonction ne matche pas si le paramètre entré est plus grand que tous les entiers de la liste
exemple:
insert[1;2;3] 5 ne marche pas.
des idées?
exemple:
insert[1;2;3] 5 ne marche pas.
des idées?
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
Modifié par KX le 23/11/2011 à 16:18
Modifié par KX le 23/11/2011 à 16:18
Là c'est un autre bug, indépendant, ce coup-ci c'est lorsque la liste l est vide, il ne faut pas renvoyer une liste vide mais la liste qui contient a... |[]->[a]
Je résume :
Cependant cette écriture n'est pas vraiment belle pour les puristes, parce qu'on préférera utiliser au maximum le pattern matching qui est plus puissant que la condition if.
De plus il est plus intéressant de faire apparaître le lambda-calcul vu qu'on fait de la programmation fonctionnelle, ce qui t'oblige à passer la liste en deuxième argument...
Je résume :
let rec insert l a = match l with []->[a] |tete::queue -> if(a<=tete) then a::l else tete::(insert queue a);;
Cependant cette écriture n'est pas vraiment belle pour les puristes, parce qu'on préférera utiliser au maximum le pattern matching qui est plus puissant que la condition if.
De plus il est plus intéressant de faire apparaître le lambda-calcul vu qu'on fait de la programmation fonctionnelle, ce qui t'oblige à passer la liste en deuxième argument...
let rec insert a = function []->[a] |tete::queue when a>tete -> tete::(insert a queue) |l -> a::l;;
23 nov. 2011 à 12:49