bonjour bonjour,
voila je suis pas un grand programmateur de CaML light je n'en fais que dans le cadre de ma prepa, donc je pense que la où je coince ne vous posera aucun souci ^^
donc voila j'ai une fonction qui ne marche pas et je viens demander un peu d'aide
cette fonction se trouve a la fin dun algorithme de recherche de chemin le plus court
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 let CheminSolution ClosedList depart cible= let L=[cible] in let rec recup_papa papa= function |[]->failwith"cas n'arrivant jamais" |a::q when (q1(a))=papa ->a |a::q -> recup_papa papa q in while (hd(L)<>depart) do (recup_papa (q5(hd(L))) ClosedList)::L done; in L ;;
le principe de cette fonction est
j'ai une closedlist dont les elements sont des quintuplets
chaque quintulpet a son nom en premier element et le nom de son pere en 5e element
la closed list a normalement son premier element qui est "cible" mais cette liste n'est pas triee
le but est de recuperer de fils en pere le chemin qui amene de depart (qui est present dans la closed list) a cible
le chemin etant donc decrit au final par une liste L commencant a depart et finissant a cible et dont les elements de L sont ordonnés de successeurs en successeurs
la fonction q1(a) renvoie le premier element du quintuplet a
q5(a) le cinquieme element du quintuplet a
voici le message d'erreur que je recupere
Toplevel input:
> (recup_papa (q5(hd(L))) ClosedList)::L
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning: this expression has type ('a * 'b * 'c * 'd * 'a) list,
but is used with type unit.
Toplevel input:
> L;;
> ^
The value identifier L is unbound.
je desespere -_-* j'ai essayé de bidouiller en utilisant une ref sur L mais comme en prepa on nous interdit les ref en cours ba resultat je sais meme pas les utiliser et si vous voyez comment faire sans, je suis preneur ^^
bon et puis si vous avez envie de l'essayer sur votre propre compilateur
pour que vous n'ayez pas a les retaper
je vous remercie déjà d'avoir eu la patience de lire ce message jusqu'au bout ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 let q1 q = let a,z,e,r,t= q in a;; let q5 q = let a,z,e,r,t= q in t;;
Partager