Aller au menu - Aller au contenu

[CaML] Erreur de typage

Structure de données exotique

Pour accéder à cette section
Connectez-vous !
connexion_rpx

Résolu Le problème de ce sujet a été résolu

Page 1 
Auteur Message
2 visiteurs sur ce sujet (2 anonymes)
Page 1 
Hors ligne julienvonmarseille # Posté le 05/02/2012 à 18:36:26
Avatar

Études : Lycée Thiers - Marseille

Salut les Zéros :)
Je suis actuellement en train de coder une implémentation de l'algorithme de Dijkstra en CaML Light et j'ai une coquille.
Je fais actuellement une fonction qui permet d'avoir accès à tous les successeurs d'un point dans un graphe et la fonction que j'ai codée ne passe pas à l'interpréteur :
Citation : CaML Light
This expression has type ('a * 'b * sommet) list -> sommet list,
but is used with type ('a * 'b * sommet) list -> sommet.

Voici actuellement la portion de code posant problème :
Code : OCaml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
type sommet = Sommet of int
and fleche == sommet * float * sommet
and graphe == (sommet * (fleche) list) list ;;
(* Fonctions utiles *)
let direction (x,y,z) = z;;
let rec directionl listoffleches =
	match listoffleches with
		| [] -> [Sommet(-1)]
		| tete :: queue -> [direction tete] @ [directionl queue]
;;
let rec getSuccesseurs graphe point =
	match graphe with
	| [] -> failwith "Graphe vide"
	| (sommet , (fleche::restefleches)) :: reste -> 
							if sommet = point then (direction fleche, directionl restefleches) else getSuccesseurs reste point
;;

Le problème se situe actuellement dans ma fonction "directionl" qui donne l'erreur ci-dessus. J'ai bien essayé de modifier et remodifier ma fonction mais ça ne fonctionne toujours pas.

Merci d'avance de m'aider :)

PS : je suis un novice en CaML donc si vous pouviez m'expliquer mon erreur en des termes simples ce serait sympa

#LGDF: Calizero vaincra !
«La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !» Albert Einstein, à propos des gens qui postent sur les forums du SDZ
 
Publicité # Posté le 05/02/2012 à 18:36:26

Hors ligne PatJ # Posté le 05/02/2012 à 19:21:13
Ça ne marchera jamais !
Avatar

Ville : Cachan
Pays : France métropolitaine
Études : ENS Cachan

Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
À la ligne 9 de ton code, il faut remplacer [directionl queue] par (directionl queue).

Tout cela vient du fait que directionl renvoie déjà une liste. La mettre entre crochets en fait une liste de liste, ce qui n'est pas la valeur attendue.

Message publié sous licence CC-BY-SA
 
Hors ligne julienvonmarseille # Posté le 05/02/2012 à 19:22:28
Avatar

Études : Lycée Thiers - Marseille

Merci beaucoup, ça marche :)

#LGDF: Calizero vaincra !
«La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !» Albert Einstein, à propos des gens qui postent sur les forums du SDZ
 

Retour au forum "Autres langages, outils et approches" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx


Lire aussi