J'essaye de faire un tableau de fonction, que j'utilise dans un ListFreduce HOF. Je l'habitude d'avoir unType-discordance entre List.reduce et le type défini
let minimax = [| (min : int->int->int); max |]
qui fonctionnait très bien, mais maintenant je veux obtenir la valeur maximale d'une liste, donc je pensais:
let minimax = [|List.min; List.max|]
Ceci, cependant, jette l'erreur suivante :
Minimax.fs (175,5): erreur FS0030: restriction de valeur. La valeur 'minimax' a été déduite pour avoir le type générique val minimax: ('_a list ->' _a) [] lorsque '_a: comparaison
Soit définir' minimax 'comme un simple terme de données, en faire une fonction avec arguments explicites ou, si vous ne souhaitez pas qu'il soit générique, ajoutez une annotation de type.
J'ai ajouté une annotation de type comme ceci:
let minimax = [|(List.min:TreeOfPosition list -> TreeOfPosition); List.max|]
et compilé. Le problème est maintenant avec List.reduce,
| BranchP(position, children) -> List.reduce (minimax.[minOrmax]) (List.map (loop (1 - minOrmax)) children)
Type mismatch. Attendre un TreeOfPosition -> TreeOfPosition -> TreeOfPosition mais étant donné une liste de TreeOfPosition -> TreeOfPosition Le type 'TreeOfPosition' ne correspond pas au type 'liste TreeOfPosition'
Merci pour avoir une pointe,
Pedro Dusso
Oui, j'ai raté une certaine contextualisation, mais votre conseil (Puisque List.min est essentiellement défini comme List.reduce min) a bien fonctionné! Je vous remercie! –