right hand side of let rec

From: Laurent Chéno (lcheno@club-internet.fr)
Date: Mon Sep 07 1998 - 17:15:05 MET DST


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?éno?= <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 _ = () ;;

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=FBr, 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 ?



This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:15 MET