[
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: | Remi Vanicat <vanicat@l...> |
| Subject: | Re: [Caml-list] One question |
"Alexander S. Usov" <A.S.Usov@KVI.nl> writes:
> Hi!
>
> Can anybody expalin me why in such code
>
> ------
> type lex_node = Letter of char * bool * lex_tree
> and lex_tree = lex_node list ;;
>
> exceprion Already ;;
>
> let rec insert lex word =
> let whd = word.[0]
> and wtl = String.sub word 1 (String.length word - 1)
> in
> try
> match lex with
> | (Letter(c,b,t) as letter)::tail when (c <> whd) ->
> letter :: (insert tail word)
> | Letter(c,b,t) :: tail when (wtl = "") ->
> if b = true then
> raise Already
> else
> Letter(c,true,t) :: tail
> | Letter(c,b,t) :: tail ->
> Letter(c,b,(insert t wtl)) :: tail
> | [] ->
> if wtl = "" then
> [ Letter (whd, true, []) ]
> else
> [ Letter (whd, false, insert [] wtl) ]
> with
> | Already -> lex ;;
>
> let a = insert [] "word"
> in
> a == insert a "word" ;;
> -----
>
> returns false?
a #trace insert make it very clear to me : it's because the Already
exception is immediately caught. your code do exactly the same than :
let rec insert lex word =
let whd = word.[0]
and wtl = String.sub word 1 (String.length word - 1)
in
match lex with
| (Letter(c,b,t) as letter)::tail when (c <> whd) ->
letter :: (insert tail word)
| Letter(c,b,t) :: tail when (wtl = "") ->
if b = true then
lex
else
Letter(c,true,t) :: tail
| Letter(c,b,t) :: tail ->
Letter(c,b,(insert t wtl)) :: tail
| [] ->
if wtl = "" then
[ Letter (whd, true, []) ]
else
[ Letter (whd, false, insert [] wtl) ]
you should catch the exception at the top most part of the insertion.
--
Rémi Vanicat
vanicat@labri.u-bordeaux.fr
http://dept-info.labri.u-bordeaux.fr/~vanicat
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners