Browse thread
right hand side of let rec
- Laurent Chéno
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ 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 ?