Version française
Home     About     Download     Resources     Contact us    
Browse thread
right hand side of let rec
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Laurent Chéno <lcheno@c...>
Subject: right hand side of let rec
Sorry : poor-english version at the end.

Je ne comprends pas ce qui se passe avec le programme suivant :

(*****)
let ignore _ = () ;;

type 'a cycle = {	mutable val : 'a ;
					mutable pred : 'a cycle ;
					mutable succ : 'a cycle } ;;

let ajoute_au_cycle c x 	let p = c.pred
	and s = c.succ
	in
	let r =	{ val = x ; pred = p ; succ = c }
	in
	p.succ <- r ;
	c.pred <- r ;
	r ;;

let cycle_of_list l 	let rec r = { val = hd l ; succ = r ; pred = r }
	in
	do_list (function x -> ignore (ajoute_au_cycle r x)) (tl l) ;
	r ;;
(*****)

Caml me renvoie un message d'erreur :

#Entrée interactive:
>	let rec r = { val = hd l ; succ = r ; pred = r }
>	                    ^^^^
Ce genre d'expressions n'est pas autorisé comme membre droit d'un "let rec".


Bien sûr, j'ai contourné la difficulté en écrivant

let cycle_of_list l      let hd_l = hd l
     in
     let rec r = { val = hd_l ; succ = r ; pred = r }
     in
     do_list (function x -> ignore (ajoute_au_cycle r x)) (tl l) ;
     r ;;

Mais pourquoi Caml est-il si malheureux ?

Cordialement, Laurent Chéno

------- poor english

the later program causes an error : unauthorised expression in rhs of "let rec"
why ?