Pardonnez ma nouveauté à OCaml, mais j'ai une fonction très simple où je retourne l'intersection de deux listes, mais seulement quand l'élément est dans les deux listes en même temps. Sur la troisième ligne, on me dit "Cette expression a un type 'mais une expression était attendue de type' une liste ', mais n'est-ce pas une liste que je produis?Pourquoi n'est-ce pas une liste?
let rec intersection (l1 : 'a list) (l2 : 'a list) : 'a list = match l1,l2 with
| [],[] -> [] (* empty lists *)
| [h1::t1], [h2::t2] -> (* non-empty lists *)
if h1 = h2 (* if both elements are the same *)
then h1 :: intersection(t1,t2) (* include in intersection response *)
else intersection(t1, t2) (* else ignore it and check the remaining elements *)
Tous les bras doivent retourner le même type. Dans l'expression 'else', il me semble' intersection (t1, t2) 'peut renvoyer juste un' 'a'. L'affichage de l'intégralité de la fonction serait plus utile. – PieOhPah
'intersection (t1, t2)' appelle 'intersection' avec un tuple' (t1, t2) '. Il devrait être appelé 'intersection t1 t2'. – PieOhPah
Ne semble pas changer quoi que ce soit avec l'erreur de type. Toujours obtenir Cette expression a le type 'a mais une expression était attendue de type ' une liste La variable de type 'a se produit dans' une liste – Swift142