Bonjour
Le programme que je suis entrain de faire (solveur de Sokoban) a de façon très simplifiée la structure suivante :
Étant donné que la fonction solve va être appellée des centaines de milliers de fois durant l'exécution, je me demandais comment le compilateur traitait la définition locale de la fonction possible_moves.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 let rec solve (c:configuration) = let possibles_moves c = ... (* renvoie la liste des mouvements effectuables dans cette configuration *) ... ... in List.iter (fun m -> solve (effectue c m)) (possibles_moves c);; (* où effectue c m renvoie la configuration c après avoir effectué le mouvement m *)
Est-ce qu'il va relire et se traduire la définition de possibles_moves à chaque appel de solve sans s'apercevoir que c'est toujours la même chose, ou bien est-ce qu'il va ne la lire qu'une seule fois, la première fois qu'il la rencontre?
Parce que dans le premier cas je dois perdre un temps considérable à la relire à chaque fois alors que rien n'a changé dans sa définition.
Qu'en pensez-vous?
(Edit)
NB : Ma fonction possibles_moves est récursive terminale, je ne sais pas si ça peut vous être utile.
Fractal
Partager