unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
From: Clinton Ebadi <clinton@unknownlamer.org>
To: guile-user@gnu.org
Subject: Re: Me no understand scoping
Date: Tue, 29 Jul 2008 23:24:59 -0400	[thread overview]
Message-ID: <87r69ccaus.fsf@unknownlamer.org> (raw)
In-Reply-To: <e2ceda030807291418w9901e5bud173fd11d4788b8@mail.gmail.com> (Maciek Godek's message of "Tue\, 29 Jul 2008 23\:18\:05 +0200")

"Maciek Godek" <pstrychuj@gmail.com> writes:

> Hi,
> consider the following code (simple iteration
> construct invented mainly to cause naming
> conflict, as the function 'times' is already
> defined in guile)
>
> (define-macro (times n f)
>   `(let ((env (the-environment)))
>      (let loop ((i 0))
>        (if (< i ,n)
>            (begin
>              (local-eval ,f env)
>              (loop (1+ i))
>              )
>            )
>        )
>      )
>   )
>
> the whole thing with env was made as
> a workaround disallowing f to see the
> i variable defined in the macro (and to
> perhaps see the value that otherwise
> would be shadowed)
>
> however,
>
> (times 20 (display i))
>
> yields
>
> 012345678910111213141516171819
>
> Why?

`macroexpand-1' is helpful here -- (local-eval ,f env) is wrong.

As a matter of style, you probably want to avoid local-eval as it will
have to be removed whenever Guile ends up with a faster compiler (one
day when guile-vm is integrated into core and lexical environments
become fixed arrays or similar), and messing with existing lexical
environments is Very Bad (tm). Avoiding all uses of eval and, by
extension, local-eval is a good idea.

-- 
The hubbub of the waking life might close a door 
which in the dreamy Subliminal might remain ajar...




  reply	other threads:[~2008-07-30  3:24 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-29 21:18 Me no understand scoping Maciek Godek
2008-07-30  3:24 ` Clinton Ebadi [this message]
2008-07-30  8:42   ` Maciek Godek
2008-07-30 14:03     ` Jon Wilson
2008-07-30 15:04       ` Klaus Schilling
2008-07-30 19:24       ` Maciek Godek
2008-07-31  7:20         ` Neil Jerram
2008-07-31 19:21           ` Maciek Godek
2008-07-31 21:37             ` Neil Jerram
2008-07-31 23:07               ` Maciek Godek
2008-08-02 17:43                 ` Neil Jerram
2008-08-02 21:36                   ` Maciek Godek
2008-08-08 20:54                     ` Neil Jerram
2008-08-10 21:49                       ` Maciek Godek
2008-08-09 11:05                     ` Andy Wingo
2008-08-10 22:30                       ` Maciek Godek
2008-09-11 14:56                       ` JonWilson
2008-07-31 23:48             ` Clinton Ebadi
2008-08-01 22:00               ` Maciek Godek
2008-08-02  5:13                 ` Jon Wilson
2008-08-02 21:35                   ` Maciek Godek
     [not found] <cmu-lmtpd-29005-1217434291-0@mail-imap1.uio.no>
2008-07-30 16:18 ` Kjetil S. Matheussen
2008-07-30 19:03   ` Clinton Ebadi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87r69ccaus.fsf@unknownlamer.org \
    --to=clinton@unknownlamer.org \
    --cc=guile-user@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).