From: Markus Mottl <email@example.com>
Subject: Re: Constructor/reference bug?
To: firstname.lastname@example.org (John Skaller)
Date: Thu, 12 Aug 1999 13:16:03 +0100 (MET DST)
In-Reply-To: <email@example.com> from "John Skaller" at Aug 11, 99 06:05:30 pm
> let g x =
> let lineno = ref (1,"") in
> let rec f x' = match x' with
> | NEWLINE p :: t -> lineno := p; f t
> | COLON :: t -> CTRL !lineno :: f t
> | h :: t -> h :: f t
> |  -> 
> in f x;;
> The code doesn't work as I expected: every
> CTRL value refers to the same lineno, the last one.
> If I change the COLON line to read:
> | COLON :: t -> let x = !lineno in CTRL x :: f t
> the code works as expected -- the CTRL refers to the
> value of lineno at the time the last NEWLINE was processed.
> What's happening? Are coproduct constructors lazy?
No, but OCaml evaluates all kind of expressions right-to-left which is
probably not very intuitive for people who are used to read from left
-- Markus Mottl, firstname.lastname@example.org, http://miss.wu-wien.ac.at/~mottl
This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:24 MET