right hand side of let rec

Laurent Ch=?ISO-8859-1?Q?=e9no?= (lcheno@club-internet.fr)
Mon, 7 Sep 98 17:15:05 +0200

Message-Id: <199809071512.RAA29199@front1.grolier.fr>
Subject: right hand side of let rec
Date: Mon, 7 Sep 98 17:15:05 +0200
From: Laurent Ch=?ISO-8859-1?Q?=e9no?= <lcheno@club-internet.fr>
To: "Caml list" <caml-list@margaux.inria.fr>

Sorry : poor-english version at the end.

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

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

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

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

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

Caml me renvoie un message d'erreur :

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

Bien s=FBr, j'ai contourn=E9 la difficult=E9 en =E9crivant

let cycle_of_list l =3D
let hd_l =3D hd l
in
let rec r =3D { val =3D hd_l ; succ =3D r ; pred =3D 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=E9no

------- poor english

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