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=2.0 required=5.0 tests=DATE_IN_FUTURE_03_06 autolearn=disabled version=3.1.3 Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by yquem.inria.fr (Postfix) with ESMTP id DEE7BBC68 for ; Wed, 25 Oct 2006 18:18:48 +0200 (CEST) Received: from mail.tepkom.ru (mail-ilca.tepkom.ru [82.179.167.5]) by concorde.inria.fr (8.13.6/8.13.6) with ESMTP id k9PGImOt020837 for ; Wed, 25 Oct 2006 18:18:48 +0200 Received: from localhost (localhost [127.0.0.1]) by mail.tepkom.ru (Postfix) with ESMTP id CFC1C580C71B; Wed, 25 Oct 2006 20:18:27 +0400 (MSD) X-Virus-Scanned: by amavisd-new-2.4.0 (20060403) (Debian) at tepkom.ru with clamav Received: from mail.tepkom.ru ([127.0.0.1]) by localhost (mail.tepkom.ru [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5Hx5TFdX267B; Wed, 25 Oct 2006 20:18:27 +0400 (MSD) Received: from [192.168.1.4] (ppp91-122-5-200.pppoe.avangard-dsl.ru [91.122.5.200]) by mail.tepkom.ru (Postfix) with ESMTP id 3751D580C715; Wed, 25 Oct 2006 20:18:27 +0400 (MSD) Message-ID: <453FC6D5.2040404@tepkom.ru> Date: Wed, 25 Oct 2006 20:19:33 +0000 From: Dmitri Boulytchev User-Agent: Mozilla Thunderbird 1.0.6 (X11/20050905) X-Accept-Language: ru-ru, ru MIME-Version: 1.0 To: Serge Aleynikov , caml-list@inria.fr Subject: Re: [Caml-list] camlp4 scope issue References: <453F8464.3000808@hq.idt.net> <453FBE38.3030602@tepkom.ru> <453F8AF8.4090306@hq.idt.net> In-Reply-To: <453F8AF8.4090306@hq.idt.net> Content-Type: text/plain; charset=windows-1251 Content-Transfer-Encoding: 7bit X-Miltered: at concorde with ID 453F8E68.000 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Spam: no; 0.00; camlp:01 syntax:01 compiler:01 syntax:01 iterative:01 semicolon:01 printf:01 printf:01 compiler:01 ocamlc:01 -pp:01 camlp:01 6.2:98 wrote:01 caml-list:01 The revised syntax description you are referring to is quite informal so I'd rather trust the compiler :) You may restict the scope of a binding in a way its usual done in other languages: by do {let y = 1 in a}; b; c; in revised or by (let y = 1 in a); b; c; in standard syntax. BR, DB. > 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? >>> >> >> > >