List.iter / OCaml

Fermé
Op_m Messages postés 2 Date d'inscription dimanche 18 octobre 2009 Statut Membre Dernière intervention 19 octobre 2009 - 19 oct. 2009 à 13:02
Op_m Messages postés 2 Date d'inscription dimanche 18 octobre 2009 Statut Membre Dernière intervention 19 octobre 2009 - 19 oct. 2009 à 20:10
Bonjour,
j'aimerais reconstruire la fonction preexistante List.iter en OCaml. j'ai fais quelques essais mais impossible de retrouver le bon typage, a savoir : ('a -> unit) -> 'a list -> unit = <fun>.

Voila ou j'en suis :

let rec list_iter f l = match l with
[] -> []
| e::t -> begin (f e); list_iter f t;() end;;

et on me revoi l'erreur :

"This expression has type unit but is here used with type 'a list"

Si quelqu'un peut m'aider a resoudre ce probleme qui je m'en rends compte ne doit pas etre tres complique, je lui en serait tres reconnaissant.

2 réponses

stephane_mc2004 Messages postés 755 Date d'inscription samedi 12 juillet 2008 Statut Membre Dernière intervention 8 février 2011 96
Modifié par moska le 4/04/2011 à 00:11
let rec list_iter f l = match l with 
[] -> [] 
| e::t -> f e :: list_iter f t ;; 

Signature hors-charte - Supprimée par la modération
3
Op_m Messages postés 2 Date d'inscription dimanche 18 octobre 2009 Statut Membre Dernière intervention 19 octobre 2009 1
19 oct. 2009 à 20:10
enfait la fonction que tu as ecrite est un List.map et non List.iter. Elle n'a pas le typage que j'aurais voulus. c'est a dire qu'elle renvoi ('a -> 'b) -> 'a list -> 'b alors que je voudrais que f renvoi un unit.
1