Browse thread
[Caml-list] baffled by semicolon
[
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: | skaller <skaller@u...> |
| Subject: | Re: Baffeld by manual (Was: [Caml-list] baffled by semicolon) |
On Mon, 2004-08-30 at 17:12, Florian Hars wrote: > briand@aracnet.com wrote: > > I went back through the manual and really couldn't find anything which > > explained the difference between ; and ;; The single ; is (usually) left associative binary sequencing operator of type unit that takes two expressions of type unit as an argument: e1 ; e2 evaluates e1, then e2 (for side effects). I said 'usually' because it has another role in some contexts -- [();()] is a list of two units whereas [(();())] is a list of one unit. [This is like the ugly C hackery with , ] The top level of Ocaml 'executes' statements in sequence. For example: let _ = e1 let _ = e2 The role of ;; has nothing to so with top level sequencing: the sequencing is already built in. The purpose of ;; is much simpler -- it is nothing more than a piece of punctuation marking the end of a statement. As you can see above it is not required if (a) there is a next statement and (b) that next statement starts with a keyword You may need ;; in the interpreter to tell it 'there isn't another statement, start evaluating'. You may also need it if you use a statement not starting with a keyword, for example here: let x = ref 0 ;; x := 1 (* doesn't start with a keyword *) where you can see that ;; is more or less the keyword you use to start a statement when it doesn't start with a keyword.. that isn't quite correct, since you don't need one at the start (its really a separator which is 'infered' when the parser hits an unexpected keyword :) This code is actually very ugly because you can't lift it out of the top level. let _ = let x = ref 0 in x := 1 is the way to do this properly -- and here the x := 1 is an expression contained in the let/in expression. -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- 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