2017-10-21 65 views
0

J'utilise le code suivant pour essayer de mettre la moyenne des nombres consécutifs dans une liste d'entier dans une nouvelle liste:fonction récursive OCaml ne fonctionne pas

let newList = [] 
let rec average2 xs = 
match xs with 
| [] -> newList 
| x :: [] -> newList 
| x :: x' :: [xs] -> append newList [((x + x')/2)] average2 x' :: [xs];; 

mais je continue à obtenir l'erreur suivante et n » t comprendre pourquoi: Erreur: Cette fonction a le type 'une liste ->' une liste -> 'une liste Il est appliqué à trop d'arguments; peut-être avez-vous oublié un `; '

+0

Pourquoi avez-vous 'newList'? C'est toujours une liste vide. – Palle

+0

@Palle Je veux l'utiliser comme parent de variable pour continuer à ajouter des éléments à – KONADO

+0

'newList' est constant et il n'est jamais lu dans le code. – Palle

Répondre

1

Vous passez la fonction average2 à la fonction append au lieu de l'appeler à la dernière ligne. En outre, newList est vide et ne pas être muté ou lu. Vous pouvez simplement ajouter une nouvelle tête à la liste en la retournant.

Modifier à

((x + x')/2) :: (average2 x' :: [xs]) 
+0

Je reçois toujours la même erreur – KONADO

+0

Supprimer 'newList' de la liste des arguments. C'est une liste vide de toute façon. – Palle