From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from discorde.inria.fr (discorde.inria.fr [192.93.2.38]) by yquem.inria.fr (Postfix) with ESMTP id 65704BC68 for ; Wed, 25 Oct 2006 18:04:09 +0200 (CEST) Received: from mail.corp.idt.net (mail.corp.idt.net [169.132.25.53]) by discorde.inria.fr (8.13.6/8.13.6) with ESMTP id k9PG48Ns029197 for ; Wed, 25 Oct 2006 18:04:09 +0200 Received: from [169.132.9.113] (account saleyn HELO [169.132.9.113]) by mail.corp.idt.net (CommuniGate Pro SMTP 4.2.10) with ESMTP id 182003456; Wed, 25 Oct 2006 12:04:08 -0400 Message-ID: <453F8AF8.4090306@hq.idt.net> Date: Wed, 25 Oct 2006 12:04:08 -0400 From: Serge Aleynikov User-Agent: Thunderbird 1.5.0.7 (Windows/20060909) MIME-Version: 1.0 To: Dmitri Boulytchev , bhurt@janestcapital.com Cc: caml-list@inria.fr Subject: Re: [Caml-list] camlp4 scope issue References: <453F8464.3000808@hq.idt.net> <453FBE38.3030602@tepkom.ru> In-Reply-To: <453FBE38.3030602@tepkom.ru> Content-Type: text/plain; charset=windows-1251; format=flowed Content-Transfer-Encoding: 7bit X-Miltered: at discorde with ID 453F8AF8.001 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Spam: no; 0.00; camlp:01 syntax:01 iterative:01 syntax:01 semicolon:01 printf:01 printf:01 compiler:01 ocamlc:01 -pp:01 camlp:01 6.2:98 wrote:01 caml-list:01 binary:01 Perhaps I am misunderstanding the meaning of ";" in the revised syntax, however, the 6.2 chapter (http://caml.inria.fr/pub/docs/manual-camlp4/manual007.html) says that: do { e1; e2; e3; e4 } is an iterative sequence of expressions, whereas "let ... in" is reserved for local constructs. If so, wouldn't the scope of y in let y = 1 in do { a; b; c }; be different from: let y = 1 in a; b; c; Or else how to we indicate in the *revised syntax* the boundary of the "let ... in" scope? Serge Dmitri Boulytchev wrote: > That's ok - semicolon does not restict the scope since it plays role > of a binary operation, not a statement delimiter. So in your example > > (); Printf.printf "y should be out of scope, but it's not: y = %d\n" y > > is a while scope for let-binding. > > Best regards, > Dmitri Boulytchev, > St.Petersburg State University. > > >> Hi, >> >> In the test program below in my understanding the 'y' variable should be >> out of scope in the printf statement, but apparently it's not. The >> compiler version is 3.09.3. >> >> $ cat tst.ml >> value f z = z + 1; >> >> let x = 1 in do { >> let y = f x in (); >> Printf.printf "y should be out of scope, but it's not: y = %d\n" y >> }; >> >> $ ocamlc -o tst -pp camlp4r tst.ml >> $ ./tst >> y should be out of scope, but it's not: y = 2 >> >> >> Any idea why? >> > > -- Serge Aleynikov Routing R&D, IDT Telecom Tel: +1 (973) 438-3436 Fax: +1 (973) 438-1464